Ceci est ma requête
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
Cela fonctionne correctement.
Maintenant, je veux récupérer le nom de la table pour les productName
respectifs à l'avenir.
J'ai essayé AS
.. comme ceci:
SELECT Id, productName, Largeimagepath, Discount, Price, Image
FROM tablename3 AS tablename
where Active = 1;
mais n'a pas obtenu de sortie.
En règle générale, lorsque vous utilisez UNION
et que vous devez savoir de quelle table provient une ligne spécifique, vous utilisez une valeur codée en dur stockée dans une colonne similaire à:
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;
Cela renverra une nouvelle colonne appelée Source
avec un identifiant qui montre de quelle table provient la ligne.
Comme @ypercube l'a suggéré dans les commentaires, vous pouvez également envisager de le modifier en UNION ALL
- cela inclura le doublon mais vous aurez également un identifiant sur la table d'où il vient. Utilisant un UNION ALL
éliminera l'impact sur les performances de la suppression des doublons.
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;
Vous pouvez essayer ceci avec UNION ALL
comme vous aurez probablement besoin également d'une entrée en double, tout comme l'ajout du nom de table, il sera unique et les performances seront également améliorées
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;
la requête ci-dessous fonctionne mieux et vous donne une meilleure idée car les requêtes ci-dessus ne rendent pas les lignes deux fois.
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
le script ci-dessus ne donne pas de lignes de données en double et assurez-vous
si vous voulez des données communes de la table t2, retournez la jointure gauche