gpt4 book ai didi

mysql - LEFT JOIN 表,但如果条件不匹配则排除

转载 作者:行者123 更新时间:2023-11-29 18:09:04 32 4
gpt4 key购买 nike

我有动态条件。有时有条件,有时没有。我想从左侧获取所有结果,但排除与条件不匹配的行。我有什么办法可以实现这个目标吗?就我所拥有的而言,它总是从左侧获取所有行。如果我使用内部联接,如果它们无法联接,则不会从基表中获取记录。我需要能够从动漫表中获取所有记录,但是如果设置了条件,则仅获取符合条件的记录。

SELECT anime.id, anime.title, IF(english IS NULL or english = '', anime.title, english) as english, anime.slug
FROM anime
LEFT JOIN genres g ON g.anime_id = anime.id
LEFT JOIN episodes e ON e.anime_id = anime.id
LEFT JOIN videos v on v.episode_id = e.id
$conds
GROUP BY anime.id
ORDER BY $order
LIMIT $limit

$conds、$order、$limit是用php动态生成的。

条件的示例是

WHERE anime.status = 'completed' AND v.type = 'subbed'

这里的问题是,如果我使用左连接,v.type 的条件将被完全忽略,并且它会从动漫表中获取所有记录。

无论如何,进行左连接都会从动漫表中获取所有行。但如果有条件,我不想获取所有行,而只想获取与条件匹配的行。但如果没有条件,那么无论如何都会获取所有行。

如果我使用 INNER JOIN 而不是 LEFT JOIN,如果动漫没有剧集或视频,它将无法获取它们,但我需要获取它们。

最佳答案

我也遇到了类似的问题,需要使用EXISTS,如下例:

SELECT t1.* FROM table_1 t1 
WHERE EXISTS (SELECT t2.* FROM table2 t2
WHERE t1.id=t2.t1_id AND t2.some_field='some value')

因此您的查询应如下所示:

SELECT anime.id, anime.title, IF(english IS NULL or english = '', anime.title, english) as english, anime.slug
FROM anime
LEFT JOIN genres g ON g.anime_id = anime.id
LEFT JOIN episodes e ON e.anime_id = anime.id
WHERE EXISTS (SELECT v.* FROM videos v WHERE v.episode_id = e.id AND v.type = 'subbed')
AND anime.status = 'completed'
GROUP BY anime.id
ORDER BY $order
LIMIT $limit

我知道您的问题已经过时了,但我将其提交给任何有类似问题的人:)

关于mysql - LEFT JOIN 表,但如果条件不匹配则排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47547120/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com