select
sld.linkid,sld.accept,scd.catid,scd.catname,scd.caturl,scd1.parentcatid
from sound_link_droos sld
INNER JOIN sound_cat_droos scd
ON sld.catid=scd.catid
OR
INNER JOIN sound_cat_droos scd1
ON sld.catid=scd1.parentcatid
WHERE accept = '1' AND scd.catname = '$catname'");
我想知道我是否可以拥有或在此声明或...如果一个内部联接返回fals
sound_cat_droos
Catidcatnameparentidaccepturl 1David01http://www.example.com中 2Jazz music11http://www.example.comsound_link_droos
linkidlinknamecatidaccepturl 1my love11http://www.example.com/audio.mp3 2my baby 21http://www.example.com/audio.mp3答案 0 :(得分:1)
最佳解决方案是在Join中使用Union all而不是OR,如下所示:
select sld.linkid,sld.accept,scd.catid,scd.catname,scd.caturl,scd1.parentcatid from sound_link_droos sld
INNER JOIN sound_cat_droos scd
ON sld.catid=scd.catid
where accept = '1' and scd.catname = '$catname'
union all
select sld.linkid,sld.accept,scd.catid,scd.catname,scd.caturl,scd1.parentcatid from sound_link_droos sld
INNER JOIN sound_cat_droos scd1
ON sld.catid=scd1.parentcatid
where accept = '1' and scd1.catname = '$catname';
答案 1 :(得分:1)
您可以在or
子句中表达on
逻辑,如下所示:
select sld.linkid, sld.accept,s cd.catid, scd.catname, scd.caturl, scd1.parentcatid
from sound_link_droos sld inner join
sound_cat_droos scd
on sld.catid = scd.catid or sld.catid = scd.parentcatid
where accept = 1 and scd.catname = '$catname';
这种连接通常是性能杀手,这可能不是你真正想要的。如果没有,请询问带有示例数据和所需结果的另一个问题。
我删除了'1'
周围的单引号,因为我猜测该值是数字。应将数字与数字进行比较。
提及参数也是必须的。您不应该使用参数值来修改查询字符串。了解如何正确使用参数。
答案 2 :(得分:0)
如果没有规范,我们只能猜测查询应返回的内容。
所以这是一个猜测。
我们得到catname匹配某些值的所有_cat_
:
SELECT scd.catid
, scd.catname
, scd.caturl
FROM sound_cat_droos scd
WHERE scd.catname = 'someval'
我们知道_cat_
可能是其他_cat_
的父级。我们也希望归还那些孩子_cat_
。这是一个查询:
SELECT scc.catid
, scc.catname
, scc.caturl
FROM sound_cat_droos scc
JOIN sound_cat_droos scp
ON scp.catid = scc.parentcatid
WHERE scp.catname = 'someval'
我们可以使用UNION ALL集合运算符将这两个查询的结果合并为一个集合。然后我们可以将该组合加入_link_
SELECT sld.linkid
, sld.accept
, sca.catid
, sca.catname
, sca.caturl
FROM ( SELECT scd.catid
, scd.catname
, scd.caturl
FROM sound_cat_droos scd
WHERE scd.catname = 'someval'
UNION ALL
SELECT scc.catid
, scc.catname
, scc.caturl
FROM sound_cat_droos scc
JOIN sound_cat_droos scp
ON scp.catid = scc.parentcatid
WHERE scp.catname = 'someval'
) sca
JOIN sound_link_droos sld
ON sld.catid = sca.catid
AND sld.accept = '1'
如果重要(由于某种原因)知道我们匹配的_cat_
是直接匹配,还是与子_cat_
匹配,我们可以包含一个鉴别列在内联视图查询中,并在结果集中返回该查询。
SELECT sld.linkid
, sld.accept
, sca.catid
, sca.catname
, sca.caturl
, sca.src
FROM ( SELECT 1 AS src
, scd.catid
, scd.catname
, scd.caturl
FROM sound_cat_droos scd
WHERE scd.catname = 'someval'
UNION ALL
SELECT 2 AS src
, scc.catid
, scc.catname
, scc.caturl
FROM sound_cat_droos scc
JOIN sound_cat_droos scp
ON scp.catid = scc.parentcatid
WHERE scp.catname = 'someval'
) sca
JOIN sound_link_droos sld
ON sld.catid = sca.catid
AND sld.accept = '1'
我们只是猜测要求,应该返回什么结果。此查询可能符合您的规范。但我们不知道那个规范是什么。