SQL - LEFT JOIN 和 WHERE 语句仅显示第一行

Posted

技术标签:

【中文标题】SQL - LEFT JOIN 和 WHERE 语句仅显示第一行【英文标题】:SQL - LEFT JOIN and WHERE statement to show just first row 【发布时间】:2017-04-29 22:13:55 【问题描述】:

我阅读了许多主题,但没有找到解决问题的正确方法。堪比这个Thread

我有一个查询,它收集数据并将每个 shell 脚本写入 csv 文件:

SELECT
    '"Dose History ID"' = d.dhs_id,
    '"TxFieldPoint ID"' = tp.tfp_id,
    '"TxFieldPointHistory ID"' =  tph.tph_id,
    ...

FROM txfield t
LEFT JOIN txfielpoint tp ON t.fld_id = tp.fld_id
LEFT JOIN txfieldpoint_hst tph ON fh.fhs_id = tph.fhs_id
...

WHERE d.dhs_id NOT IN ('1000', '10000')
    AND ...
ORDER BY d.datetime,...;

这是基于一个非常大的数据库,其中包含许多表和机器值。我选择了我感兴趣的列,并通过它们的内置表 ID 将它们链接起来。现在我必须减少我的结果,其中我得到许多具有相同值的行并且只是更改了 ID。我只需要一个(第一)行“tph.tph_id”与像

这样的机制
WHERE "Rownumber" is 1

或类似的东西。到目前为止,我无法实现正确的子查询或使用ROW_NUMBER() SQL 函数。您的帮助将不胜感激。结果看起来像这样,根据最后一个 ID,我只需要为每个 og 这个数字一行(所有 ID 都不是严格连续的)。

A01";261511;2843119;714255;3634457;
A01";261511;2843113;714256;3634457;
A01";261511;2843113;714257;3634457;
A02";261512;2843120;714258;3634464;
A02";261512;2843114;714259;3634464;
....

【问题讨论】:

尝试GROUP BY [除 tph.tph_id 之外的所有字段] 用于聚合时,GROUP BY 应该会给您想要的结果 也许我遗漏了一些东西,但是在您选择的开头,您遇到了一个致命错误。您不能为字符串赋值(即'"Dose History ID"' = d.dhs_id 是非法的)。其次,您使用的是别名 d(就像在 WHERE d.dhs_id NOT IN ('1000', '10000') 中一样),我看不出这个别名是在哪里定义的。 @FDavidov d (和其他)的别名稍后在 SELECT 部分中使用。我试过了 感谢您的回复 - @FDavidov d (和其他)的别名稍后在 SELECT 部分中跟随。我试图用“...”表明这只是实际代码的一部分,因为查询非常大,但按所示方式工作。此语句在我的 csv 中为我提供了第一行中的描述“剂量历史 ID”,并在列中的第二行之后写入了值。我用 GROUP BY 进行了尝试,但并非多行中的每个数据都相同。只是ID不同,但不分组就足够了。还是我走错了路? 【参考方案1】:

我认为“GROUP BY”可能适合您的需求。

您可以将一组列的具有相同值的行分组为一行

【讨论】:

以上是关于SQL - LEFT JOIN 和 WHERE 语句仅显示第一行的主要内容,如果未能解决你的问题,请参考以下文章

SQL: LEFT JOIN , RIGHT JOIN , INNER JOIN 区别 , on 和 where条件的区别

浅谈!SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别

SQL left joinright join和inner join的区别以及where的搭配使用

在 SQL ACCESS 中使用 LEFT 或 INNER JOIN 和 WHERE 的问题

SQL语句中 LEFT JOIN 后 ON 和 WHERE 的区别

SQL语句中 LEFT JOIN 后 ON 和 WHERE 的区别