如果第二个表包含记录,则将属性添加为列

时间:2012-09-25 18:08:15

标签: mysql

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

id
name
course

另一个包含

选民

   id
   personID
   type

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

我希望以persons.course = '1' AND voters.type = '2'为例让所有用户获得并输出包含以下列:id,name,hasVoted(如果personID可以在选民表中找到,则其中hasVoted返回true)

1 个答案:

答案 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