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))

上記のクエリは機能しますが、2 番目の列を返す別のサブクエリと結合する必要なく、サブクエリの結果をユニオンに変換できれば素晴らしいと思います。

... 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 では、最初に 1 つ、次に 1 つ、両方のクエリを使用する必要があります。

ただし、次のように、それを行う 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 に答える