MySQL从具有重复引用条目的联合表中选择唯一记录

时间:2014-06-23 18:04:32

标签: mysql sql database-design relational-database

如何显示当前与第二个表中的结果不匹配的表中的所有内容。

例如:我想在(表A)中显示当前没有类型1记录的每个名称。注意'肯'目前有两个日志条目。每种类型1和类型2一个。结果应该只显示John和Genius

表A - 名称

+-----+--------+
| nid |  name  |
+-----+--------+
|   1 |    ken |
|   2 |   john |
|   3 | genius |
+-----+--------+

表B - 日志(每个名称可能有多个条目)

+------+-----+
| type | nid |
+------+-----+
|    1 |   1 |
|    2 |   1 |
|    2 |   2 |
+------+-----+

预期结果

| nid |  name  |
+-----+--------+
|   2 |   john |
|   3 | genius |

4 个答案:

答案 0 :(得分:0)

您需要做的就是在子查询

中对type ='1'的记录进行排序
SELECT NAME FROM TABLEA WHERE NID NOT IN (SELECT NID FROM TABLEB WHERE TYPE='1')

答案 1 :(得分:0)

SELECT nid, name from tableA 
 inner join tableB on tableA.nid = tableB.nid
 where nid > 1

答案 2 :(得分:0)

SQL Fiddle Example

SELECT * 
FROM TableA a
WHERE NOT EXISTS (SELECT * FROM TableB b WHERE a.nid = b.nid AND b.type = 1) 

答案 3 :(得分:0)

您可以使用左连接...

SELECT a.nid, a.name
FROM tableA a
LEFT JOIN tableB b ON a.nid = b.nid AND b.type = 1
WHERE b.nid IS NULL

基本上,如果查询无法在表B中找到满足连接条件的记录,那么它将加入一行所有空值。