2

テーブル A を |name1|name2|value| として持っています。

テーブル B を |name|value| として。

ここで、テーブル A の「name1」および「name2」属性は、テーブル B の「名前」を参照する外部キーです。

今、次のようなクエリ関数が必要です。

    SELECT value FROM A WHERE name1 IN 
    (SELECT name FROM B WHERE value = '1') AND 
    name2 IN (SELECT name FROM B WHERE value = '1')

ここで問題は、上記のコードのようにすると、テーブル B から 2 つのクエリが作成されることです。しかし、実際には 1 つのクエリしか必要ありません。

    SELECT value FROM A WHERE name1,name2 IN (SELECT name FROM B WHERE value = '1') 

そして、次のようなものが必要な場合はどうなりますか:

    SELECT value FROM A WHERE name1,name2 IN 
   (SELECT name FROM B ORDER BY value DESC FETCH FIRST 200 ROWS ONLY)

?

4

5 に答える 5

0

参加してそれを行うことができますか?

select value from A inner join table b b1 on a.name1 = b1.name inner join table b b2 on a.name2 = b2.name where b1.name = '1' and b2.name = '1'

于 2013-03-05T04:11:03.527 に答える
0

このような結合を使用できますSELECT A.value FROM A inner join B on A.name1 = B.name inner join B on A.name2 = B.name where B.name in ('1')か?

于 2013-03-05T04:18:12.453 に答える
0

SQLServer2005 +では、 NOT EXISTS + EXCEPT演算子でオプションを使用できます

 SELECT A.value 
 FROM A 
 WHERE NOT EXISTS (                   
                   SELECT A.name1
                   UNION
                   SELECT A.name2                   
                   EXCEPT
                   SELECT B.name
                   FROM B 
                   WHERE B.value = '1'                 
                   )

SQLFiddleのデモ

于 2013-03-05T07:21:47.313 に答える
0

テーブル B にビューを作成して使用しますか?

Create view B_LIMITED AS SELECT name FROM B WHERE value = '1'

select value from A inner join table b_limited b1 on a.name1 = b1.name inner join table b_limited b2 on a.name2 = b2.name where b1.name = '1' and b2.name = '1'
于 2013-03-05T08:04:19.833 に答える
0
select name, value from b
left outer join (select name1 from a where value = '1') as a1 on 
a1.name1 = b.name
left outer join (select name2 from a where value = '1') as a2 on 
a2.name2 = b.name
where value is not null
/*omit null from left outer join for names not in table b*/
于 2013-03-05T04:39:52.927 に答える