我有两张桌子。quotes_table
和 flags_table
. 该 quotes_table
具有一对多的关系。flags_table
- 每个引用可以有多个标志。flags_table.id_flag
是一个外键的 quotes_table.id_flag
.
示例输入
报价表
pk | quote_key | id_flag
--------------------------
1 | 111 | 200
2 | 222 | 251
3 | 111 | 250
旗帜表
id_flag | name
---------------
200 | testing
251 | converted
250 | paid
预期产出
quote_key | id_flag | name
-------------------------------------
222 | 251 | converted
总而言之,我试图返回所有没有 "测试 "标志的引号,即使有其他标志存在。
我目前的查询仍然返回 quote_key
记录111,因为 left join
但我不知道如何 "过滤 "出来。
当前查询
SELECT q.quote_key, q.id_flag, f.name FROM quotes_table AS q
LEFT JOIN flags_table AS f ON q.id_flag = f.id_flag
WHERE f.name != "testing"
示例图 quotes_table
和 flags_table
:
执行结果 LEFT JOIN
之间 quotes_table
和 flags_table
.
红色的行代表了一个引号,请注意共享的。quote_key
. 所以我试图从我的结果中扔掉红色的条目,以便我只得到没有 "测试 "标志的引号。
希望对大家有所帮助。
SELECT q.quote_key, q.id_flag, f.name FROM quotes_table AS q
INNER JOIN flags_table AS f ON q.id_flag = f.id_flag
WHERE f.name != "Testing"
AND q.quote_key not in (select quote_key from quotes_table q1, flags_table f1
where q1.id_flag = f1.id_flag and f1.name = 'Testing')