Heim > Datenbank > MySQL-Tutorial > Kenntnisse in SQL-Anweisungen: Verwenden Sie OR geschickt, um bei Abfragen eine logische Beurteilung zu erzielen

Kenntnisse in SQL-Anweisungen: Verwenden Sie OR geschickt, um bei Abfragen eine logische Beurteilung zu erzielen

伊谢尔伦
Freigeben: 2016-11-23 13:43:17
Original
1500 Leute haben es durchsucht

Sehen Sie sich zunächst den folgenden logischen SQL-Anweisungsblock an:

DECLARE @fieldname    varchar(50)
DECLARE @fieldvalue nvarchar(100)
SET @fieldname='chassisno' --这里可传入chassisno,plateno,owner,contacttelno其中之一或不传
SET @fieldvalue='Zuowenjun'
IF @fieldname = 'chassisno'
BEGIN
    SELECT * FROM TABLENAME WHERE chassisno=@fieldvalue
END
ELSE IF @fieldname = 'plateno'
BEGIN
    SELECT * FROM TABLENAME WHERE plateno=@fieldvalue
END
ELSE IF @fieldname = 'owner'
BEGIN
    SELECT * FROM TABLENAME WHERE [owner]=@fieldvalue
END
ELSE IF @fieldname = 'contacttelno'
BEGIN
    SELECT * FROM TABLENAME WHERE contacttelno=@fieldvalue
END
ELSE
BEGIN
    SELECT * FROM TABLENAME
END
Nach dem Login kopieren

Wenn Sie nun eine SQL-Anweisung verwenden müssen, um die obige logische Beurteilung zu implementieren und die Ergebnisse abzufragen, können Sie über die Verwendung des folgenden Spleißens nachdenken Methode, um dies zu erreichen:

DECLARE @sqltext NVARCHAR(2000)
SET @sqltext='SELECT * FROM TABLENAME WHERE ' + @fieldname + '=''' + @fieldvalue +''''
EXECUTE (@sqltext)
Nach dem Login kopieren

Obwohl dies in der Lage zu sein scheint, logische Beurteilungen und Abfrageergebnisse zu erzielen, scheint es nicht intuitiv genug zu sein, Änderungen sind mühsam und fehleranfällig und weisen gewisse Einschränkungen auf, weil @fieldname ist hier dasselbe wie das Tabellenfeld, und das Zusammenfügen ist einfacher. Wenn die Umstände anders sind, ist es nicht möglich, daher habe ich hier nicht über die Effizienz gesprochen. Aber es ist auf jeden Fall einfach zu verwenden und flexibel genug. Bitte sehen Sie sich die folgende SQL-Anweisung an:

SELECT * FROM TABLENAME a WHERE 1=1 --(如果需要其它条件则用其它条件,否则可以这样或不要,如果不要则下面的第一个AND需去掉)
AND ((@fieldname = &#39;chassisno&#39; AND a.chassisno=@fieldvalue) OR (@fieldname<>&#39;chassisno&#39;) )
AND ((@fieldname = &#39;plateno&#39; AND a.plateno=@fieldvalue) OR (@fieldname<>&#39;plateno&#39;) )
AND ((@fieldname = &#39;owner&#39; AND a.[owner]=@fieldvalue) OR (@fieldname<>&#39;owner&#39;) )
AND ((@fieldname = &#39;contacttelno&#39; AND b.contacttelno=@fieldvalue) OR (@fieldname<>&#39;contacttelno&#39;) )
Nach dem Login kopieren

Es wurde überprüft, dass diese SQL-Anweisung logische Beurteilungen und Abfrageergebnisse realisieren kann, und zwar auch dann, wenn @fieldname anders ist Das Tabellenfeld können wir nun direkt durch das Prinzip ersetzen:

AND ((@fieldname = 'chassisno' AND a.chassisno=@fieldvalue) OR (@fieldname<>' Fahrgestellnr') )

Da es sich um eine UND-Verknüpfung handelt, müssen die Bedingungen in den folgenden Klammern erfüllt sein, und da in den Klammern die ODER-Beziehung verwendet wird, können die Bedingungen auf beiden Seiten der Klammern eine von erfüllen Die Übersetzung lautet: Wenn @fieldname = 'chassisno', dann ist a.chassisno=@fieldvalue erforderlich. Andernfalls werden die vorherigen Zuordnungsbedingungen ignoriert. Beachten Sie, dass sich ihre Eigenschaften gegenseitig ausschließen, das heißt, die Bedingungen auf beiden Seiten von OR können nur eine davon erfüllen. Wenn Sie bessere Methoden oder unterschiedliche Meinungen haben, können Sie sich natürlich gerne austauschen und gemeinsam Fortschritte machen!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage