mysql - LEFT JOIN - 从左表选择中丢失一行

标签 mysql join

我在执行以下查询时遇到问题:

SELECT 
IFNULL(t4.ItemID, 
IFNULL(t3.ItemID, IFNULL(t2.ItemID, t1.ItemID))) AS ID, 
IFNULL(t4.ParentItemID, 
IFNULL(t3.ParentItemID, 
IFNULL(t2.ParentItemID, t1.ParentItemID))) as Parent, 
IFNULL(tp4.ItemNo, IFNULL(tp3.ItemNo, IFNULL(tp2.ItemNo, tp1.ItemNo))) AS ItemNo
FROM ItemsParents AS t1
LEFT JOIN ItemsDB AS tP1 
ON t1.ItemID = tP1.ID
LEFT JOIN ItemsParents AS t2 
ON t1.ItemID = t2.ParentItemID
LEFT JOIN ItemsDB AS tP2 
ON t2.ItemID = tP2.ID
LEFT JOIN ItemsParents AS t3 
ON t2.ItemID = t3.ParentItemID
LEFT JOIN ItemsDB AS tP3 
ON t3.ItemID = tP3.ID
LEFT JOIN ItemsParents AS t4 
ON t3.ItemID = t4.ParentItemID
LEFT JOIN ItemsDB AS tP4 
ON t4.ItemID = tP4.ID
WHERE t1.ParentItemID = 
(
SELECT ID 
FROM ItemsDB 
WHERE ItemNoInt = 359
)

此表应从选择的第一部分返回两行(822 和 875),并从以下 ItemsParents LEFT JOINS 附加更多行。它会附加新行,但原始两行中的一行会丢失。
822
859
834
846
810
...所以第 875 行丢失了
如果我从父项中删除或禁用 LEFT JOIN(通过 "= 1 -- " - 注释掉原始条件):

SELECT IFNULL
(
t4.ItemID, 
IFNULL(t3.ItemID, IFNULL(t2.ItemID, t1.ItemID))) AS ID, 
IFNULL(t4.ParentItemID, 
IFNULL(t3.ParentItemID, 
IFNULL(t2.ParentItemID, t1.ParentItemID))) as Parent, 
IFNULL(tp4.ItemNo, 
IFNULL(tp3.ItemNo, IFNULL(tp2.ItemNo, tp1.ItemNo))) AS ItemNo
FROM ItemsParents AS t1
LEFT JOIN ItemsDB AS tP1 
ON t1.ItemID = tP1.ID
LEFT JOIN ItemsParents AS t2 
ON t1.ItemID = 1 -- t2.ParentItemID
LEFT JOIN ItemsDB AS tP2 
ON t2.ItemID = tP2.ID
LEFT JOIN ItemsParents AS t3 
ON t2.ItemID = 1 -- t3.ParentItemID
LEFT JOIN ItemsDB AS tP3 
ON t3.ItemID = tP3.ID
LEFT JOIN ItemsParents AS t4   -- t4.ParentItemID
ON t3.ItemID = 1 
LEFT JOIN ItemsDB AS tP4 
ON t4.ItemID = tP4.ID
WHERE t1.ParentItemID = 
(
SELECT ID 
FROM ItemsDB 
WHERE ItemNoInt = 359
)

...我从左连接表(822 和 875)返回正确的两行。

我用谷歌搜索了左连接表中丢失行的案例,但它们似乎都不适用于这种情况。有什么想法吗?

问候,

伦敦银行同业拆借利率

最佳答案

不是答案,只是想法,我希望您已经要求在左连接中查找表的最后一行,

select LastRowofSubTable.* from tableMain
outer apply
(
    select top 1 * from tableSub
    where tableMain.id = tableSub.id
    order by tableSub.pk_id desc
)as LastRowofSubTable

关于mysql - LEFT JOIN - 从左表选择中丢失一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22911387/

相关文章:

java - 多列的 Hibernate 搜索查询

mysql - 如何在mysql查询中获取第一个空格后的所有单词

使用 JOINS 和 GROUP BY 进行 MySQL 查询

mysql - 使用 JOIN 进行复杂 SQL 查询

postgresql - 合并来自两个独立数据库的结果

php - MySQL GROUP BY 忽略 ORDER BY 子句

mysql - 如何在 SQL Buddy 中使用外键?

php - 在取消设置 mysql 对象之前释放结果并关闭连接,或者只是取消设置会破坏对象 n 释放资源?

php - SQL LEFT JOIN 不使用主键的查询太慢,如何加快速度?

mysql - 加入三个mysql表