【发布时间】:2020-06-04 19:59:22
【问题描述】:
我正在尝试从多个表中选择数据。主表是Notices。
表格:注意事项 +--------+-------------+----------------+ |编号 |通知代码 |公司号码 | +--------+-------------+----------------+ | 96008 | 2410 | 09844265 | | 96014 | 2450 | 02640968 | | 96032 |第2443章03666759 | +--------+-------------+----------------+
我必须从不同的表中为Table Notice 的行选择相关信息。下面是其他4张表以及它们与table Notices的关系
Table Companies与Table Notices有直接关系
Table Sic_codes 与 Table Notices 没有直接关系。但它有Table Companies。
Table Insovency_Practionar 与Table Notices 没有直接关系。还有一个Table Notice_insolvency_practitionar_ID用来创建这两个表之间的关系Table Insovency_Practionar and Table Notices
我的预期输出如下:公司名称来自table company; sic1 和部门将来自table sic_code,从业者将来自table Insovency_Practionar
我在我的 QUERY 中使用了 LEFT Join。
这是我的查询
SELECT n.company_number
, c.company_name
, c.sic1
, s.sector
,i.name practitioner
FROM notices n
LEFT JOIN companies c
ON c.company_number = n.company_number
LEFT JOIN sic_codes s
ON s.code = c.sic1
LEFT JOIN notice_insolvency_practitioners ni
ON ni.notice_id = n.id
LEFT JOIN insolvency_practitioners i
ON i.id = ni.insolvency_practitioner_id
where n.notice_code =2410
这是我的 SQL Fiddle。 http://sqlfiddle.com/#!9/4887e2/2
我想知道我的查询是否正确。或者有没有其他更好的方法来编写查询。最初,当我测试时,查询给了我错误的结果。
更新:我发现有一个重复的条目。这就是没有得到预期输出的原因。我现在已经纠正了。但是还是想知道我的查询是对的还是有更好的方法来写查询
【问题讨论】:
-
这看起来是一个非常详细的问题。但是,如果您可以用简单的英语添加描述,您可能会帮助读者理解实际结果与预期结果之间的不同之处。有更多的行(四而不是三)和更多的列,但也许你可以缩小你想要关注的主要内容。
-
我看不出你的结果有什么问题。
-
请在您的帖子中添加minimal reproducible example,而不仅仅是在链接中。 (那么这些输入表是多余的。)在 MRE 中,您可以给出最少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)暂停整体目标的工作,将代码砍到第一个表达式,而不是给出你所期望的,说出你所期望的和原因。即第一个坏加入。不要只是给出错误的代码并要求我们调试。这也没有描述查询作为输入函数返回的内容,示例是什么的示例。我们如何帮助它正确? (修辞。)同样,MRE 的一部分。
-
您如何将相同的通知 (96008) 分配给 2 个不同的从业者?
-
请根据我的所有评论采取行动。 PS 这包括,从您的示例中删除不必要的列,确保它运行,然后将它们全部放在这里 - 完全相同的代码。不需要非代码格式的版本。 (你的表初始化被格式化为表是好的。)不要让我们去小提琴。但是我的评论说还有很多其他的事情要做。 PS我猜你是在给出选择及其输出来说明你想要的整体输出,但它们是一种误导和不清楚的方式来实现这一点,因为它们不是你运行的实际代码的子表达式和值。