2016-09-04 1 views
-1

In SQL Server 2016 habe ich eine Tabelle mit zwei Spalten, die Namen von Dingen enthalten, die verglichen werden (sagen wir SUBJECT und COMP). Da die Vergleichswerte gleich sind, egal ob A-> B oder B-> A, ist es nicht sinnvoll, beides zu speichern, also speichere ich nur A-> B. Das bringt ein neues Problem auf SELECT. Grundsätzlich gilt:Wählen Sie Logik auf zwei austauschbaren Spalten

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; 

Ich kann nicht scheinen, um herauszufinden, wie „Gib mir eine Zeile zu sagen, in der die Kombination von‚ABLQ‘und‚FMIP‘in jeder Spalte vorhanden sein können, aber die beiden Spalten müssen beide enthalten Werte (mit anderen Worten, ABLQ/ABLQ und FMIP/FMIP werden nicht zurückgegeben, aber sowohl ABLQ/FMIP als auch FMIP/ABLQ würden - oder sollte ich sagen - beides würden) , weil nur einer der beiden tatsächlich existieren würde. ich habe verschiedene Kombinationen ausprobiert und kann nicht scheinen, es direkt in der Logik-Abteilung zu bekommen. ich mit so etwas wie

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

Irgendwelche Gedanken enden?

Antwort

1

So stellen Sie sicher, dass beide Spalten nicht gleich sind, nachdem Sie eine Reihe mit den richtigen Werten haben:

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

Vielen Dank! Gott, der jetzt so offensichtlich erscheint, aber nach 36 Stunden am Keyboard weiß ich nicht mehr, wie ich heiße. Ich schätze deine Hilfe sehr, wenn ich das Offensichtliche auf mich zeige. –

0

Ich würde geneigt sein, um die Logik zu schreiben wie:

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

ich diese Formulierung finden leichter zu folgen.

Verwandte Themen