我有两个表,其中存储了一些事务性内容。每个表中每user_id
个记录很多。表1和表2具有彼此一对一的关系。我想从两个表中提取记录,但我想排除在两个表中具有特定值的记录。我不在乎他们是否都没有这些值,或者只有一个值,但两个表都不应该同时具有这两个值。
例如:
SELECT t1.id, t1.type, t2.name
FROM table1 t1
INNER JOIN table2 t2 ON table.xid = table2.id
WHERE t1.user_id = 100
AND (t1.type != 'FOO' AND t2.name != 'BAR')
因此,t1.type
是ENUM
类型,有大约10个不同的选项,而t2.name
也是ENUM
类型,有2个选项。
我的预期结果看起来有点像:
1, FOO, YUM
2, BOO, BAR
3, BOO, YUM
但相反,我得到的只是:
3, BOO, YUM
它似乎过滤掉了所有以“FOO”为类型且“BAR”为名称的记录。
(我们正在使用MySQL 5.1 ...... )
答案 0 :(得分:6)
如果我理解您的问题,您应该更改查询以使用OR
:
AND (t1.type != 'FOO' OR t2.name != 'BAR')
这与
相同AND NOT (t1.type = 'FOO' AND t2.name = 'BAR')
并删除两个条件匹配的所有行。