2012-03-08 9 views
0

を使用したSQL文のリターン)list.ispublic = 1
2)userlist.userid='aaa'userlist.listid=list.listid私は</p> <p>1行を選択しようとしていますゼロ結果

私は1)2が必要)

行がありますすでにこのステートメントはその行を取得することはできません、何か問題はありますか?

一覧表:

ListID ListName Creator IsRemindSub IsRemindUnSub IsPublic CreateDate LastModified Reminder 
1  test2  aaa  0   0    1   2012-03-09 NULL   NULL 

user_listテーブル(ノー行):これはuser_listに2つのリストがある場合の結果である

SELECT * 
FROM list l 
INNER JOIN user_list ul ON ul.ListID = l.ListID 
WHERE l.IsPublic = 1 AND ul.UserID = '09185346d' 

UserID ListID UserRights 

私のテストバージョンがありますaaaと1つのリストがリスト内でpublicなので、これはリスト内のその1つの公開リストを2回取り出すことになります。 p?

ListID ListName Creator IsRemindSub IsRemindUnSub IsPublic CreateDate LastModified Reminder UserID ListID UserRights 
1   test2  aaa  0    0    1   2012-03-09 NULL      aaa  1   read 
2   t2   aaa  0    0    1   2012-03-09 NULL      aaa  2   read 
+0

暗黙的(Oracleスタイル)の結合は "内部"結合です。 –

答えて

0

まず、実際に必要なフィールドをSELECTにしてください。次に、JOINSを明示的に記述してください。読みやすくするために役立ちます。たとえば:あなたはあなたのuser_listテーブル内のデータがない場合

SELECT l.*, ul.* 
FROM list l 
INNER JOIN user_list ul ON ul.ListID = l.ListID 
WHERE l.IsPublic = 1 
    AND ul.UserID = 'aaa' 

ところで、あなたは、あなたが設定した要件を満たすために方法がありません。 "userlist.listid = list.listid"と入力して、user_listテーブルが空の場合は、常にゼロ行が返されます。

編集:いいえ、行が2重に取得されることはありません。どのような結果をSQLクエリで取得しても、PHPスクリプトと同じ結果になります。データを取得するメカニズムは同じです。

+0

アップデート版をご覧ください。ありがとうございました。 – user782104

+0

@ user782104:私は自分の答えを更新しました。それ以上のデータを最初の質問に追加する場合は、正しく表示されないので、質問にタブをコピー/貼り付けしないでください。 – Crontab

1

user_listテーブルに行が含まれていない場合、そのクエリは結果を返しません。

LEFT JOINが必要です。

SELECT list.col_1, list.col_2 -- etc... 
FROM list 
LEFT JOIN user_list ON user_list.ListID = List.ListID 
WHERE list.IsPublic = 1 
    OR user_list.UserID = 'aaa' 
+0

ああ別の部分は正しいですか? – user782104

+0

彼は上記の仕様に従って「INNER JOIN」を望んでいます: "userlist.userid = 'aaa' AND userlist.listid = list.listid"。リストIDが一致しなければならないという事実は、内部結合を示すでしょう。 – Crontab

+0

私は質問に欠陥があると思う。 :) –

関連する問題