Sql语句返回零结果

时间:2012-03-08 18:19:42

标签: mysql database

我正在尝试选择

1)list.ispublic = 1
2)userlist.userid='aaa'userlist.listid=list.listid

我需要1)+2)

已经有一行但是这句话不能得到那一行,有什么问题吗?

列表:

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

user_list表(无行):

UserID ListID UserRights

我的测试版

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

这是结果,当user_list中有两个列表有aaa,并且列表中有一个列表是public时,如果我在php中获取它,这会导致列表中的那个公共列表的双重检索吗?

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

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

首先,尝试仅SELECT您实际需要的字段。其次,明确地写下你的JOINS - 它有助于提高可读性。例如:

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

顺便说一句,如果您的user_list表中没有数据,那么您无法满足您设置的要求。如果您需要“userlist.listid = list.listid”并且user_list表为空,那么您将始终返回零行。

编辑: 不,它不会导致行被检索到两次。无论您在SQL查询中得到什么结果,都会得到与PHP脚本相同的结果 - 检索数据的机制是相同的。