これは私の質問です
SELECT Id, productName, Largeimagepath, Discount, Price, Image FROM tablename1 where Active =1
union
SELECT Id, productName, Largeimagepath, Discount, Price, Image FROM tablename2 where Active =1
union
SELECT Id, productName, Largeimagepath, Discount, Price, Image FROM tablename3 where Active =1
正常に動作しています。
今後、それぞれのproductName
のテーブル名をフェッチしたいと思います。
私はAS
..を次のように試しました:
SELECT Id, productName, Largeimagepath, Discount, Price, Image
FROM tablename3 AS tablename
where Active = 1;
出力はありませんでした。
通常、UNION
を使用していて、特定の行がどのテーブルからのものかを知る必要がある場合は、次のような列に格納されているハードコードされた値を使用します。
SELECT Id, productName, Largeimagepath, Discount, Price, Image, 'Tablename1' as Source
FROM tablename1
where Active =1
union
SELECT Id, productName, Largeimagepath, Discount, Price, Image, 'Tablename2' as Source
FROM tablename2
where Active =1
union
SELECT Id, productName, Largeimagepath, Discount, Price, Image, 'Tablename3' as Source
FROM tablename3
where Active =1;
これにより、Source
という新しい列が返され、その行がどのテーブルから来たかを示す識別子が付けられます。
@ypercubeがコメントで示唆しているように、これをUNION ALL
に変更することも検討してください。これには重複が含まれますが、それがどのテーブルから来たのかについての識別子もあります。 UNION ALL
を使用すると、重複を削除することによるパフォーマンスへの影響が排除されます。
SELECT Id, productName, Largeimagepath, Discount, Price, Image, 'Tablename1' as Source
FROM tablename1
where Active =1
union all
SELECT Id, productName, Largeimagepath, Discount, Price, Image, 'Tablename2' as Source
FROM tablename2
where Active =1
union all
SELECT Id, productName, Largeimagepath, Discount, Price, Image, 'Tablename3' as Source
FROM tablename3
where Active =1;
これはUNION ALL
で試すことができます
おそらく重複するエントリも必要なので、テーブル名を追加すると、一意になり、パフォーマンスも向上します
SELECT Id、productName、Largeimagepath、Discount、Price、Image、 'Tablename1' as TableName FROM tablename1 where Active = 1 UNION ALL SELECT Id、productName、Largeimagepath、Discount、Price、Image、 'Tablename2' as TableName FROM tablename2 where Active = 1 UNION ALL SELECT Id、 productName、Largeimagepath、Discount、Price、Image、 'Tablename3' as TableName FROM tablename3 where Active = 1;
上記のクエリは行を2回レンダリングしないので、以下のクエリはより適切に機能し、より良いアイデアを提供します。
SELECT t1.*,t1.table_name
FROM
t1
UNION ALL
SELECT t2.*,t2.table_name
FROM
t2
LEFT OUTER JOIN
t1
ON t1.id=t2.id
WHERE t1.id=null
上記のスクリプトは重複するデータ行を与えず、確認します
t2テーブルの共通データが必要な場合は、左結合を反転します