5

次のような2つの異なるテーブルから異なる列を選択するにはどうすればよいですか。

SELECT username, email FROM `table1` 
UNION
 SELECT * FROM `table2` WHERE username = 'user1';

エラーが発生します"#1222 - The used SELECT statements have a different number of columns"。私が理解していることから、UNIONは機能しません。

これを実現する方法はありますか?列と行の数が等しくなく、2つのテーブルに相互/類似のエントリがない(つまり、user1がtable1にリストされていない)ためです。

これを1つのクエリで実行することはできませんか?

ありがとう!

4

3 に答える 3

7

fakeエイリアスを使用して不足している列を作成できます-例:

 SELECT username, email, '' as name FROM `table1` 
 UNION
 SELECT username, email, name FROM `table2` 
 WHERE username = 'user1';

ここで、nameはtable2にありますが、table1にはありません。

UNIONSとJOINSを混同しない限り:

SELECT table1.*, table2.* FROM
table1 INNER JOIN table2
ON table1.username = table2.username

これにより両方のテーブルがマージされるため、すべての列が同じ行に表示されます。

于 2012-05-18T23:06:54.627 に答える
5

2つのテーブルに相互または類似のエントリがない場合、これらは2つの異なるselectステートメントである必要があります。

SELECT username, email FROM `table1`;


SELECT * FROM `table2` WHERE username = 'user1';

それ以外のことをする動機は何ですか?

のエントリはにtable2関連していtable1ますか?joinより適切でしょうか?

SELECT t1.username, t1.email, t2.*
FROM table1 t1
    JOIN table2 t2 ON t1.username = t2.username
WHERE t1.username = 'user1';
于 2012-05-18T23:06:33.593 に答える
3

列の少ないテーブルで、

SELECT *, 0 as col1, 0 as col2, ...

同じ列数にするためなど。

于 2012-05-18T23:07:07.777 に答える