这个查询出了什么问题(选择为RES1 Union选择param IN(RES1)的位置

时间:2009-06-08 11:07:48

标签: mysql

查询:

SELECT ct_cid as level1 FROM cat_tree WHERE ct_sid = $ sid_int AND ct_parent = $ cid_int) UNION(SELECT ct_cid as level2 FROM cat_tree WHERE ct_sid = $ sid_int AND ct_parent IN level1)

该查询应该找到最多2个树节点级别的子节点。 我得到“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在'level1附近使用正确的语法”“如何在第2个选项中使用第1个选择的结果选择?

3 个答案:

答案 0 :(得分:1)

你不需要在第二个SELECT语句周围使用parens ...而且,字段名称和顺序必须在两个SQL-Select语句中匹配。您可能需要的是

select 1 as LevelID, CT_CID from cat_tree where...  
UNION
select 2 as levelID, CT_CID from cat_tree where ...

现在,问题的另一半......使用第一个结果...将查询重做为SECOND查询中的子选择......

select 1 as LevelID, CT_CID 
    from cat_tree
    where ct_sid = $sid_int
      and ct_parent = $cid_int
union
select 2 as LevelID, CT_CID
    from cat_tree
    where ct_sid = $sid_int
      and ct_parent IN
              ( select ct_cid  
                     from cat_tree
                     where ct_sid = $sid_int
                       and ct_parent in $cid_int ) 

请注意,仅在SUB-SELECT中需要parens,而不是UNION select。不了解您的数据,可能会有更简单的方法来实现您的目标

答案 1 :(得分:0)

这不是SQL的工作原理。 IN需要一个值列表(或创建列表的子选择)。

请发布您要查询的表格的表格结构,并说明字段的含义。那么也许我们可以提供帮助。

答案 2 :(得分:0)

这是未经测试的,但您所追求的结构可能是:

SELECT ct_cid as level2 FROM cat_tree WHERE ct_sid=$sid_int AND ct_parent IN 
(
   SELECT ct_cid as level1 FROM cat_tree WHERE ct_sid=$sid_int AND ct_parent =$cid_int) 
)