2016-09-08 17 views
0

私は一緒にクエリにマージする必要があります。これは私がたくさんする単純な作業ですが、今回は少し奇妙なことがあります。私がマージしている2つのクエリは、同じテーブルと同じ列からのものです。ここでUNION ALL |同じ列とテーブルを持つ2つのクエリをマージする

は、私のオリジナルのテーブルの基本的な考え方です:

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

は、私は私のクエリは一度にすべてを返すようにしたいです。それから私はそれをどこで選んだのですか。だからSELECT * FROM 'my_table'SELECT * FROM 'my_table WHERE id IN (1,2)私はこのような何かを返すしたい。

a 
b 
a 
b 
c 
d 

編集: @dnoethは、正しい答えをコメントしました。私は最初にそれを正しく読んでいなかった。

+1

第1回SELECT UNION ALL第2選択肢 – dnoeth

+0

これは今私がやっていることです。しかし、それは動作しません。 $ posts = Posts :: where( 'id'、 '> ='、0) - > union($ reposts) - > get(); ' – CriticalTheWizard

答えて

1

私が探していた答えが見つかりました。私はちょうど私が探していた言葉の方法を知らなかった。

私がする必要があったのは、同じテーブルで2つのクエリを結合することでした。 あなたは単に代わりだからここ

組合

UNION ALLを使用することにより、これを行う mysqlのの例です。その後

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

私はこれを使用していますようにあなたがLaravelの雄弁を使用している場合。

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

あなたは結果がどうあるべきかについて本当に正確ではないよまあ以来、あなたはこのように行う可能性があります:

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 

が得られるはず:

a 
b 
b 
c 
c 
d 
0

ちょうど句のUNIONを使用し、することができます同じ結果カラムを持つ唯一のリストを持つ複数のSELECTに「結合」します。

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

そして、あなたが取得します::あなたの例は次のようになります

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

詳細: http://dev.mysql.com/doc/refman/5.7/en/union.html

PS:

UNIONのデフォルト動作では、重複する行が削除されていることですその結果から。オプションのALLキーワードを使用すると、重複行の削除は行われず、結果にはすべてのSELECT文の一致するすべての行が含まれます。

+1

これはMysqlで動作するのかどうかはわかりませんが、これはララヴェルでは間違いを投げた。私はUNION ALLを使用していました。 – CriticalTheWizard

+0

これにはsqlfiddleはありますか? – Strawberry

+0

UNIONのデフォルトの動作では、重複した行が結果から削除されます。オプションのALLキーワードを使用すると、重複行の削除は行われず、結果にはすべてのSELECT文の一致するすべての行が含まれます。 –

関連する問題