2016-09-04 16 views
-1

SQL Server 2016では、比較対象の名前を含む2つのvarchar列のテーブルがあります(SUBJECTとCOMPとしましょう)。比較値はA-> BでもB-> Aでも同じ値なので、両方を保存する点はないので、A-> Bのみを保存しています。それはSELECTに新しい問題を引き起こします。基本的には:2つの交換可能な列のロジックを選択してください

CREATE TABLE myTable(Subject varchar(50), Comp varchar(50)) 

INSERT INTO myTable(Subject, Comp) values ('SDSD', 'CFGT') 
INSERT INTO myTable(Subject, Comp) values ('FMIP', 'ABLQ') 
INSERT INTO myTable(Subject, Comp) values ('FMIP', 'FMIP') 

DECLARE @sub varchar(50), @comp varchar(50) 
SET @sub = 'ABLQ', @comp = 'FMIP; 

私は私に 『ABLQ』と 『FMIP』の組み合わせは、いずれかの列に存在することが可能な行を与える」と言うする方法を見つけ出すように見えることはできませんが、2つの列が両方が含まれている必要があります(つまり、 'ABLQ'/'ABLQ'と 'FMIP'/'FMIP'は返されませんが、 'ABLQ'/'FMIP'と 'FMIP'/'ABLQ' 2の一方のみが実際に存在してしまうので、私はいくつかの組み合わせを試したし、右のロジック部門でそれを得るように見えることはできません。私は任意の考え

SELECT * 
FROM myTable 
WHERE (Subject = @sub OR Comp = @sub) 
    AND (Subject = @comp OR Comp = @Comp) 
    AND (Subject <> @sub AND Comp <> @comp) 

のようなもので終わる?

答えて

1

ちょうどあなたが正しい値を持つ行を持った後、両方の列が等しくないことを確認してください。

SELECT * FROM myTable 
WHERE 
    ([email protected] OR [email protected]) AND 
    ([email protected] OR [email protected]) AND 
    (Subject <> Comp) 
+0

ありがとうございました!今では明らかになっている神ですが、キーボードで36時間を過ぎた後、私の名前はもはや分かりません。私は本当に私に明白なことを指摘するあなたの助けに感謝します。 –

0
私はとロジックを記述するために傾けられる

:私はこの処方を見つける

SELECT t.* 
FROM myTable t 
WHERE (Subject = @sub AND Comp = @comp) OR 
     (Subject = @comp AND Comp = @sub) ; 

フォローするのが簡単です。

関連する問題