从多列查询结果创建联合

时间:2012-07-31 04:01:40

标签: sql union

我正在尝试将sql查询的结果转换为集合。

表格如下:

create table edges (
  a int,
  b int
);

我想将查询结果用作子查询,它需要联合中的'a'和'b'列。

select * from ... where id in (select a from edges union select b from edges))

上面的查询有效,但如果我可以将子查询的结果转换为联合而不需要将其与另一个返回第二列的子查询连接,那将会很棒。

... in (select makeunion(a, b) from edges)

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

我认为如果您需要使用IN语句,则无法避免使用UNION。但您可以使用其他WHERE条件,例如:

where EXISTS(select a from edges where a=id or b=id)

答案 1 :(得分:1)

我实际上认为你不能分解这段代码。 UNION要求您同时使用两个查询,一个查询,一个查询。

但是,你可以创建一个为你做的PHP函数:

function makeUnion ($table, $rows) {
    $ret = '(';
    $array_rows = explode (',', $rows);
    foreach ($array_rows as $v) {
        if ($ret != '(')
            $ret .= ' UNION ';
        $ret .= 'SELECT ' .$v. ' FROM ' .$table;
    }
$ret .= ')';
return $ret;
}

然后在您的查询中使用它:

$sql->query("... IN " .makeUnion('edges','a,b'));

我没有测试过,所以不会有一些错误,但我认为你明白了。