1

IN 句を使用しようとしていますが、フィルタリングは 2 つの列で定義された一連の項目に対して行う必要があります。これは可能ですか?これを行う方法はおそらく他にもありますが (テーブル変数など)、可能であれば IN 句として実行したいと思います。アプリケーションで動的に作成する方がエレガントで簡単だからです。

この疑似コードは、私がやろうとしていることをより明確にするかもしれません。

SELECT *
FROM Distributors
WHERE (City,State) IN (('Springfield','OH'), ('Springfield','MO'), ('Houston','TX'))
4

5 に答える 5

5

おそらく最も簡単なのは、疑似テーブルを作成し、それに結合することです。いずれかVALUES(SQL Server 2008 以降):

SELECT d.*
FROM Distributors d
JOIN (VALUES ('Springfield','OH'), ('Springfield','MO'), ('Houston','TX'))
    as t(City,State)
ON d.City = t.City and d.State = t.State

またはUNION ALL:

SELECT d.*
FROM Distributors d
JOIN (SELECT 'Springfield','OH' UNION ALL SELECT 'Springfield','MO' UNION ALL SELECT 'Houston','TX')
    as t(City,State)
ON d.City = t.City and d.State = t.State

私はもう使用していないことを認めINますが、さまざまな要素間のセパレーターはすべて同じであるため (いずれの場合も)、うまくいけば、まだヒットします:

アプリケーションで動的に作成する方が簡単です。

(また、あなたの試みは合理的であるだけでなく、実際には ANSI 標準に近いものです。この接続の問題に投票する価値があるかもしれません)

于 2013-03-19T14:58:30.927 に答える
3
select * 
from distributors
where  ( city = 'Springfield' and State = 'OH') OR
       ( city = 'Springfield' and State = 'MO') OR
       ( city = 'Houston' and State = 'TX')

それほど複雑ではありません

于 2013-03-19T14:55:53.317 に答える
2

複数のINステートメントを実行することが可能です。これは次の方法で実現できます。

 SELECT *
 FROM Distributors
 WHERE CITY IN ('SPRINGFIELD', 'HOUSTON')
 AND STATE IN ('OH', 'MO', 'TX')

ただし、次を使用してフィルタリングしたいようですOR

 SELECT *
 FROM Distributors
 WHERE (City = 'Houston' AND State = 'TX') OR
 (City = 'Springfield' AND State = 'OH') OR
 (City = 'Springfield' AND State = 'MO')
于 2013-03-19T14:54:19.700 に答える
1

ここに答えがありますが、きれいではありませんが、うまくいきます:

SELECT *
FROM Distributors d
  INNER JOIN (SELECT 
                'Springfield' AS city
                ,'OH' AS state
              UNION 
              SELECT
                'Springfield'
                ,'MO'
              UNION
              SELECT 
                'Houston'
                ,'TX') x
WHERE d.city = x.city
  AND d.state = x.State
于 2013-03-19T15:02:29.523 に答える
0

この構成はサポートされていません。ただし、他の提案とは少し異なる方法でこれを書くことができます。

SELECT <column list>
FROM dbo.Distributors
WHERE (City = 'Springfield' AND State IN ('OH', 'MO'))
   OR (City = 'Houston' AND State = 'TX');
于 2013-03-19T15:05:23.463 に答える