2016-11-11 5 views
0

Ich habe zwei Abfragen, die ich zu einem kombinieren möchte. Eine vereinfachte Version von dem, was ich tue:So kombinieren Sie zwei SELECT-Anweisungen

SELECT * FROM table WHERE `id` = '1' ORDER BY `name` 
SELECT * FROM table WHERE `id` = '2' ORDER BY `age` 

Ich habe in Gewerkschaften gesucht, aber die Beispiele, die ich online zu finden sind weniger als hilfreich.

+2

Ich denke, Sie suchen nach "Union" oder "Union all". Auch welches DBMS benutzt du? –

+0

'where id in (1,2)'. – jarlh

+0

SELECT * FROM Tabelle WHERE ID IN (1, 2) ORDER BY Name, Alter – Beginner

Antwort

1

Sie könnten für so etwas suchen:

SELECT * FROM YourTable 
WHERE id in('1','2') 
ORDER BY id,CASE WHEN id=1 THEN age END,CASE WHEN id=2 THEN name END 

Als id ist ein Teil des Suchresultates gibt ist keine Notwendigkeit für UNION oder andere komplizierte Tricks.

Ich bin mir ziemlich sicher, dass age und name nicht den gleichen Typ sind. Eine einzige CASE WHEN könnte hier Probleme bekommen.

In meinem Vorschlag verwendet die ORDER BY drei Spalten. Dies wird übersetzen zu

ORDER BY 1,age,NULL 

oder

ORDER BY 2,NULL,name 
+0

Während dies funktioniert und ich kann irgendwie sehen, warum, bin ich neugierig, wie Sie die Bestellung ändern würden. Zum Beispiel, wenn ich wollte, dass Alter ASC ist und Name DESC ist. – Robbie

+0

Fügen Sie einfach 'ASC' oder' DESC' zu jeder Spalte als letztes Schlüsselwort hinzu ... – Shnugo

+0

Das war, was ich angenommen habe, aber ich habe einen Fehler 'ungültige Syntax' zurück. – Robbie

0

Der folgende Code wird einfach die Ergebnisse von jedem zusammenstellen. Es gibt nicht viel mehr.

SELECT * FROM table WHERE `id` = '1' ORDER BY `name` 
union 
SELECT * FROM table WHERE `id` = '2' ORDER BY `age` 
+2

Diese ORDER BYs sind ungültig und ergeben keinen Sinn. – jarlh

+0

Das würde nicht laufen? –

+2

Nicht in ANSI SQL. Vielleicht wird es ein weniger striktes dbms-Produkt ausführen? – jarlh

0

Wenden Sie den Operator Union zwischen beiden Abfragen an. Bitte beachten Sie, über die Auswahl derselben Spalte Name und Sequenz in beiden Abfragen wie unten:

SELECT id,columnname1,columnname2 FROM table WHERE id = '1' 
union 
SELECT id,columnname1,columnname2 FROM table WHERE id = '2' 
+0

Das ist genau das selbe wie 'select ... from table wo ID in (1,2)' nur mit einer Menge Overhead ... – Shnugo

0

select * from (select id aus table1 where id = 1 Bestellung von id) UNION wählen * Von (wählen Sie ID aus table2 wo id = 2 bestellen namentlich); Das funktioniert gut mit Orakel.

+0

1) Es besteht keine Notwendigkeit für UNION (siehe vorhandene Antworten) und 2) Nur das äußerste * ORDER BY ist relevant. Dieser Anruf kann in unterschiedlicher Reihenfolge von Anruf zu Anruf zurückgegeben werden ... – Shnugo

+0

yeah it it. Danke für deine wertvolle Zeit. –

Verwandte Themen