2016-09-08 1 views
0

Ich muss zu Abfragen zusammenführen. Dies ist eine einfache Aufgabe, die ich viel mache, aber dieses Mal habe ich etwas Bizarres. Die zwei Abfragen, die ich zusammenführe, stammen aus derselben Tabelle und derselben Spalte.UNION ALLE | Merge 2 Abfragen, die die gleiche Spalte und Tabelle haben

Hier ist ein Grundmodell meiner ursprünglichen Tabelle:

|id|content| 
0 | a 
1 | b 
2 | c 
3 | d 

Ich möchte meine Abfrage alles einmal zurückzukehren. Dann wieder, wo ich es ausgewählt habe. So SELECT * FROM 'my_table' und SELECT * FROM 'my_table WHERE id IN (1,2) Ich möchte es so etwas zurückgeben.

a 
b 
a 
b 
c 
d 

Edit: @dnoeth kommentiert die richtige Antwort. Ich habe es beim ersten Mal nicht richtig gelesen.

+1

'1. SELECT UNION ALL 2. SELECT' – dnoeth

+0

Hier ist, was ich gerade mache. Aber es funktioniert nicht. '$ posts = Posts :: wo ('id', '> =', 0) -> union ($ reposts) -> get();' – CriticalTheWizard

Antwort

1

Ich fand die Antwort, die ich suchte. Ich wusste einfach nicht, wie ich sagen sollte, wonach ich suchte.

Was ich tun musste, war zwei Abfragen auf der gleichen Tabelle zu vereinen. Sie dies tun, indem Sie einfach mit UNION ALL statt Vereinigung

So, hier ist ein Beispiel in mysql.

SELECT * FROM my_table UNION ALL SELECT * FROM my_table WHERE id IN (1,2) 

Dann, wenn Sie mit Laravel ist eloquent wie ich das bin verwenden.

$query = Class::whereIn('id', $array); 
Class::where('id','>=',0)->unionAll($query)->get(); 
0

Nun, da Sie nicht wirklich präzise sind auf das, was das Ergebnis sein sollte, können Sie wie folgt tun könnte:

select t1.val 
from tableT t1 
join tableT t2 on t1.id=t2.id or t1.id+1=t2.id 
where t1.id<=2 and t2.id<=2 or t1.id>=3 

ergeben sollten:

a 
b 
b 
c 
c 
d 
0

Verwenden Sie einfach die Klausel UNION, können Sie "Join" mehrere SELECTs mit der einzigen Einschränkung, dass sie gleiche Ergebnisspalten haben. Ihr Beispiel wird sein:

(SELECT * FROM 'my_table') 
UNION 
(SELECT * FROM 'my_table WHERE id IN (1,2)) 

Und Sie erhalten:

|id|content| 
0 | a 
1 | b 
2 | c 
3 | d 
1 | b 
2 | c 

Weitere Details: http://dev.mysql.com/doc/refman/5.7/en/union.html

PS:

Das Standardverhalten für UNION ist, dass doppelte Zeilen entfernt werden aus dem Ergebnis. Mit dem optionalen Schlüsselwort ALL wird die Entfernung doppelter Zeilen nicht ausgeführt und das Ergebnis enthält alle übereinstimmenden Zeilen aller SELECT-Anweisungen.

+1

Ich weiß nicht, ob das in Mysql funktioniert, aber wann ich es benutzt habe In Laravel hat es einen Fehler ausgelöst. Ich habe UNION ALL benutzt und es hat funktioniert. – CriticalTheWizard

+0

Gibt es dafür einen Platz? – Strawberry

+0

Das Standardverhalten für UNION besteht darin, dass doppelte Zeilen aus dem Ergebnis entfernt werden. Mit dem optionalen Schlüsselwort ALL wird die Entfernung doppelter Zeilen nicht ausgeführt und das Ergebnis enthält alle übereinstimmenden Zeilen aller SELECT-Anweisungen. –

Verwandte Themen