我有两个数据库:一个包含用户:
人
id
name
course
另一个包含
选民
id
personID
type
当用户投票时,会添加选民表的条目(类型描述用户可以投票的不同主题)
我希望以persons.course = '1' AND voters.type = '2'
为例让所有用户获得并输出包含以下列:id,name,hasVoted(如果personID可以在选民表中找到,则其中hasVoted返回true)
答案 0 :(得分:1)
左连接可能就是你要找的东西。
SELECT persons.id, persons.name, voters.personID IS NOT NULL AS hasVoted
FROM persons LEFT JOIN voters ON (persons.id = voters.personID)
WHERE persons.course = '1' AND voters.type = '2'
GROUP BY persons.id
http://dev.mysql.com/doc/refman/5.0/en/join.html
左连接将包括连接左侧的所有匹配行,以及连接右侧的所有匹配块。左侧没有匹配右侧的任何行的右侧列值都为null。
至于'IS NOT NULL'或'IS NULL'被使用,因为'X = NULL'的行为不像它出现的那样。
> SELECT 'A' = NULL, 'A' IS NULL, NULL = NULL, NULL IS NULL;
+------------+-------------+-------------+--------------+
| 'A' = NULL | 'A' IS NULL | NULL = NULL | NULL IS NULL |
+------------+-------------+-------------+--------------+
| NULL | 0 | NULL | 1 |
+------------+-------------+-------------+--------------+
有关使用null的更多详细信息: http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html