web-dev-qa-db-fra.com

SÉLECTIONNER des données DEPUIS deux tables dans MySQL

Ce que j'ai: La structure suivante:

table_zero
-> id (PRIMAIRE avec incrémentation automatique)
-> autre

table_1
-> id (clé étrangère pour id table zéro)
-> varchar (80) Exemple de valeur: (aahellobbb)
-> one_field

table_2
-> id (clé étrangère pour id table zéro)
-> varchar (160) Exemple de valeur: (aaececehellobbb)
-> autre_champ

Ce que je veux: Recherchez et obtenez un tableau (id, varchar) contenant toutes les correspondances avec LIKE '% str%' sur le champ varchar. Par exemple, si je recherche avec la chaîne "hello", je devrais obtenir les deux valeurs d'exemple avec leurs identifiants respectifs. Ces identifiants seront toujours différents, car ils font référence à une CLÉ PRIMAIRE.

Ce que j'ai essayé: J'ai essayé avec UNION ALL mais cela ne fonctionne pas avec LIMITS dans mon exemple.

10
Mark Tower

En utilisant UNION, vous pouvez obtenir plusieurs fois des lignes avec le même ID. Qu'en est-il de l'utilisation de LEFT JOIN?

Si j'ai compris votre question:

SELECT table_zero.id, table_1.varchar_field, table_2.varchar_field
FROM table_zero
  LEFT JOIN table_1 ON table_zero.id = table_1.id
  LEFT JOIN table_2 ON table_zero.id = table_2.id
WHERE table_1.varchar_field LIKE '%str%'
  OR table_2.varchar_field LIKE '%str%'
13
Frosty Z
SELECT table_zero.id, table_1.varchar_field, table_2.varchar_field
FROM table_zero
  LEFT JOIN table_1 ON table_zero.id = table_1.id
  LEFT JOIN table_2 ON table_zero.id = table_2.id
WHERE table_1.varchar_field LIKE '%str%'
  OR table_2.varchar_field LIKE '%str%'
2
Amal joseph

Essaye ça

SELECT *
FROM 
(
SELECT table_zero.id AS ID, table_1.varchar_field AS field
FROM table_zero
  JOIN table_1 ON table_zero.id = table_1.id
WHERE table_1.varchar_field LIKE '%str%'
UNION
SELECT table_zero.id, table_2.varchar_field  AS field
FROM table_zero
  JOIN table_2 ON table_zero.id = table_2.id
) tbl
WHERE 
tbl.field LIKE '%str%'
2
JudgeProphet