mysql筛选结果来自一对多关系

wmtdaxz3  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(310)

我有两张table。 quotes_table 以及 flags_table . 这个 quotes_tableflags_table -每个引用可以有多个标志。 flags_table.id_flag 是的外键 quotes_table.id_flag .
示例输入
报价表

pk | quote_key   | id_flag
--------------------------
1  | 111         | 200
2  | 222         | 251
3  | 111         | 250

标志\u表

id_flag | name
---------------
200 | testing
251 | converted
250 | paid

预期产量

quote_key | id_flag | name
-------------------------------------
222       | 251     | converted

总之,我尝试返回所有没有“testing”标志的引号,即使存在其他标志。
我当前的查询仍在返回 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 JOINquotes_table 以及 flags_table .

红色的行表示引号,请注意 quote_key . 所以我试着从我的结果中去掉红色的条目,这样我只得到没有“testing”标志的引号。
sql fiddle示例

lf3rwulv

lf3rwulv1#

希望这有帮助。

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')

相关问题