[前][次][番号順一覧][スレッド一覧]

mysql:6921

From: ML account <ML account <ml@xxxxxxxxxx>>
Date: Sat, 01 Feb 2003 12:15:36 +0900
Subject: [mysql 06921] Re: SQL 文について(仮)

 こんにちは。

"Kondo Tatsuya" <konet@xxxxxxxxxx>さんの
<001d01c2c977$5ef5bf50$3201a8c0@tatsuya>
"[mysql 06920] SQL 文について(仮)"


> 近藤と言います。
> 
> # 相応しいタイトル名が見つからず、仮として頂きました。
> 
> CREATE TABLE `table` (`table_id` TINYINT NOT NULL AUTO_INCREMENT, `from_user` TINYINT NOT NULL, `to_user` TINYINT NOT NULL,
> `message` CHAR NOT NULL , PRIMARY KEY (`table_id`))
> INSERT `table` SET from_user = 1, to_user = 2, message = 'テスト1';
> INSERT `table` SET from_user = 3, to_user = 2, message = 'テスト2';
> INSERT `table` SET from_user = 1, to_user = 3, message = 'テスト3';
> 
> と、
> 
> CREATE TABLE `user` (`user_id` TINYINT NOT NULL, `name` CHAR NOT NULL );
> INSERT `user` SET user_id = 1, name = '田中太郎';
> INSERT `user` SET user_id = 2, name = '田中次郎';
> INSERT `user` SET user_id = 3, name = '田中三郎';
> 
> と言う、2つのデーブルがあるとして、結果として下記のように
> なるようにSQL文を書きたいのですが、分からないでいます。
> もし、分かる方がいましたら助言頂けないでしょうか?
> 
> 1    田中太郎    田中次郎    テスト1
> 2    田中三郎    田中次郎 テスト2
> 3    田中太郎    田中三郎    テスト3
> 
> 初めの数字である「1、2」は、AUTO_INCREMENTで生成された値です。
> 
> よろしくお願い致します。

 それ以前に、色々と基本的な問題がありますよね。

	・テーブル名にtableやuserの様な名前は好ましくない。
	・バッククオートでテーブル名やカラム名を括っている
	・カラムの型(TYNYINTの使用)や長さ(tableのmessageやuserのnameの長
	  さは1)に問題がある。
	・テーブルuserにプライマリキーやインデックスが付いていない。
	・INSERT文の構文が間違っている

 MySQLでクエリが動くかをチェックするのはもちろん、 MySQLのドキュメント
を精読する、SQLのリファレンスを買って精読する、それらを基礎に色々考えて
みる、を励行しましょう。


 で、テーブル作成やデータ追加をこんな感じにしてみました。
	create table t000 (
		table_id TINYINT NOT NULL AUTO_INCREMENT,
		from_user TINYINT NOT NULL,
		to_user TINYINT NOT NULL,
		message  CHAR(50) NOT NULL,
		PRIMARY KEY (table_id)
	);

	create table u000 (
		user_id TINYINT NOT NULL,
		name CHAR(50) NOT NULL
	);

	insert into t000 (from_user,to_user,message) values(1,2,'test1');
	insert into t000 (from_user,to_user,message) values(3,2,'test2');
	insert into t000 (from_user,to_user,message) values(1,3,'test3');

	insert into u000 (user_id,name) values(1,'tanaka tarou');
	insert into u000 (user_id,name) values(2,'tanaka jirou');
	insert into u000 (user_id,name) values(3,'tanaka saburo');


 そして目的の表を出すのはこんな感じのクエリです。INNER JOINは不使用。

	select t000.table_id, u000_0.name, u000_1.name, t000.message
	from t000,u000 as u000_0, u000 as u000_1
	where t000.from_user = u000_0.user_id and t000.to_user = u000_1.user_id;



	松枝知直	<tomom@xxxxxxxxxx>
			http://www.argus.ne.jp/~tomom/



[前][次][番号順一覧][スレッド一覧]

      6920 2003-02-01 07:23 ["Kondo Tatsuya" <kon] SQL 文について(仮)                    
->    6921 2003-02-01 12:15 ┗[ML account <ml@xxxxx]                                       
      6922 2003-02-01 12:38  ┗[shogo <sho@xxxxxxxxx]                                     
      6923 2003-02-01 13:23   ┗[ML account <ml@xxxxx]                                   
      6924 2003-02-01 14:06    ┣[shogo <sho@xxxxxxxxx]                                 
      6930 2003-02-02 13:47    ┃┗[ML account <ml@xxxxx]                               
      6925 2003-02-01 14:23    ┗[Shingo Yamagai <yama]                                 
      6926 2003-02-01 17:17     ┗[<lavlav@xxxxxxxxxx> ]