我需要连接一个左表和右表,并保留所有左表行,即使右表没有匹配。..。标准的左连接。
仅包括符合条件的左侧表格行。
仅包括符合条件的右侧表行。如果没有找到,则在联接中使用null。
如果不为null,则按右表中的列排序,但如果为null,则不要松开条目。
在psudo sql中,我希望
(
select
*
from
work_item
where
work_item.id_work_item_queue = 5
) as t1
(
select
*
from
ai_guess
where
ai_guess.AI_Guess_Date = '2019:08:09:19:49:02'
) as t2
select
t1.*,
t2.*
from
t1
left join t2 on t1.id_word_crop = t2.id_word_crop
ORDER BY
ai_guess.text我得出的解决方案是
SELECT
work_item.id_work_item,
work_item.id_word_crop,
ai_guess.text
FROM
work_item
LEFT JOIN ai_guess ON
work_item.id_word_crop = ai_guess.id_word_crop
WHERE
work_item.id_work_item_queue = 5
AND
ai_guess.AI_Guess_Date = '2019:08:09:19:49:02'
ORDER BY
ai_guess.text这将生成
id_work_item, id_word_crop, text
'4', '224343', 'eie'
'3', '224342', 'geüichrt'
'2', '224341', 'rschaunig'
'6', '224345', 'VSnge'但它丢失了,左表中的条目
id_work_item, id_word_crop
'5', '224344'左表包含
SELECT
id_work_item,
id_word_crop
FROM
work_item
where
id_work_item_queue = 5 id_work_item, id_word_crop
'2', '224341'
'3', '224342'
'4', '224343'
'5', '224344'
'6', '224345'右边的表没有匹配项,所以左边的条目被删除了,但我想保留左边的条目。
SELECT
*
FROM
ai_guess
where
id_word_crop = 224344返回null
发布于 2019-09-05 09:27:09
将ai_guess表上的条件从WHERE移到ON子句:
SELECT
work_item.id_work_item,
work_item.id_word_crop,
ai_guess.text
FROM work_item
LEFT JOIN ai_guess
ON work_item.id_word_crop = ai_guess.id_word_crop AND
ai_guess.AI_Guess_Date = '2019:08:09:19:49:02'
WHERE
work_item.id_work_item_queue = 5
ORDER BY
ai_guess.text;现在发生的情况是,连接生成了您想要的中间结果,但是WHERE子句过滤掉了缺少的记录,因为它的猜测日期不匹配。通过将此限制放在联接条件中,可以防止过早删除该记录。
https://stackoverflow.com/questions/57797287
复制相似问题