0

我有两个数据库:一个包含用户:

id
name
course

另一个包含

选民

   id
   personID
   type

当用户投票时,会添加到 voters 表的条目(类型描述用户可以投票的不同主题)

我想获取所有用户,例如在哪里persons.course = '1' AND voters.type = '2'并让输出包含以下列:id、name、hasVoted(如果可以在 voters 表中找到 personID,hasVoted 返回 true)

4

1 回答 1

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 |
+------------+-------------+-------------+--------------+

有关使用空值的更多详细信息:http: //dev.mysql.com/doc/refman/5.0/en/working-with-null.html

于 2012-09-25T18:11:54.193 回答