左连接以显示空行+where

nwsw7zdq  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(360)

我有两个表,一个表包含唯一的名称(bill\u datatypes),另一个表表示这些名称连接到一些子类别(一个名称也可以连接到更多类别)。
第一张表(相关部分):

第二张表(相关部分):

我想选择所有尚未连接到特定子类别的名称。这意味着这些名称可能会在连接表中被提及,但会连接到不同的子类别。
我已通过以下子查询解决了问题:

  1. SELECT T1.name
  2. FROM bill_datatype T1
  3. WHERE NOT EXISTS (
  4. SELECT T2.bill_datatype_id
  5. FROM obligatory_field T2
  6. WHERE T2.bill_datatype_id = T1.id AND T2.bill_sub_category_id = 1
  7. )

这个解决方案似乎工作得很好,但这样我就无法从第二个表中获得任何数据,这在将来可能需要。
你对如何用左连接解决这个问题有什么建议吗(子类别的where子句对我来说太有挑战性了。)
也提前感谢您的帮助!

but5z9lq

but5z9lq1#

从我对你问题的理解来看,我认为这个问题会达到你的目的:

  1. SELECT T1.name
  2. FROM bill_datatype T1
  3. LEFT JOIN obligatory_field T2
  4. ON T2.bill_datatype_id = T1.id AND T2.bill_sub_category_id = 1
  5. WHERE T2.bill_datatype_id IS NULL

这个 WHERE 现场条件 JOIN'ed 表将只提供 T1 它们没有 bill_sub_category_id 或者他们的 bill_sub_category_id 不是1。
sqlfiddle公司

r55awzrz

r55awzrz2#

  1. SELECT distinct T1.name
  2. FROM
  3. bill_datatype T1
  4. right join
  5. (
  6. SELECT T2.bill_datatype_id
  7. FROM obligatory_field T2
  8. WHERE T2.bill_sub_category_id = 1
  9. )
  10. as T3
  11. on T1.id != T3.bill_datatype_id

http://sqlfiddle.com/#!2018年9月d4f616日

相关问题