たとえば、各テーブルの行数がわからないので、次のようにしようとします。
SELECT * FROM members
UNION
SELECT * FROM inventory
SELECT
を追加せずにこのエラーを削除するには、*の代わりに2番目のNULL
に何を入れることができますか?
*ではなく列名を明示的に入力し、各選択で同じ列の列数とデータ型が一致することを確認してください。
更新:
テーブル名に基づいて、これらのテーブルをUNIONしたいとは思わない。関連するデータが含まれていないようです。スキーマを投稿し、達成しようとしていることを説明すると、より良い支援を提供できる可能性があります。
あなたができる
SELECT *
from members
UNION
SELECT inventory.*, 'dummy1' AS membersCol1, 'dummy2' AS membersCol2
from inventory;
どこ membersCol1
、membersCol12
などは、members
にないinventory
の列の名前です。そうすれば、ユニオンの両方のクエリの列が同じになります(inventory
のすべての列がmembers
の列と同じであると仮定すると、これは私には非常に奇妙に思えます...しかしねえ、それはあなたですスキーマ)。
[〜#〜] update [〜#〜]:
HLGEMが指摘したように、これはonlyは、inventory
にmembers
と同じ名前の列がある場合にのみ機能します。同じ順序。すべての列に明示的に名前を付けるのが最善の方法ですが、名前がわからないため、正確に名前を付けることはできません。私がそうした場合、それは次のように見えるかもしれません:
SELECT id, name, member_role, member_type
from members
UNION
SELECT id, name, '(dummy for union)' AS member_role, '(dummy for union)' AS member_type
from inventory;
ダミー値にNULLを使用するのは好きではありません。レコードがユニオンのどの部分から来たのかが常に明確であるとは限らないためです。「ダミー」を使用すると、レコードがそのレコードを持たないユニオンの部分からのものであることが明確になります。 (これは問題にならない場合もありますが)。これらの2つのテーブルを結合するというアイデア自体は、同じ名前の列が1つまたは2つ以上あるとは非常に疑わしいため、私には非常に奇妙に思えますが、シナリオで想像できるような方法で質問をしました。理にかなっています。
代わりに参加したくないですか? UNIONがテーブル名を指定して必要なものを提供する可能性はほとんどありません。
MySQL UNION ALL演算子内の各SELECTステートメントは、結果セットに同じ数のフィールドがあり、データ型が類似している必要があります。訪問 https://www.techonthenet.com/mysql/union_all.php
各テーブルの行数がわかりません
これがあなたが望むものではないと確信していますか?
SELECT 'members' AS TableName, Count(*) AS Cnt FROM members
UNION ALL
SELECT 'inventory', Count(*) FROM inventory