1

我正在尝试将 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)

任何人都可以帮忙吗?

4

2 回答 2

3

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

where EXISTS(select a from edges where a=id or b=id)
于 2012-07-31T07:34:44.947 回答
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'));

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

于 2012-07-31T04:33:54.280 回答