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 的问题