Dites que j'ai deux tables - "Table1" et "Table2" dans ma base de données MySQL. La clé primaire "id" (auto_increment) dans "Table1" est la clé de référence dans "Table2" - "tab_id".requête mysql join/sous-requête/union
Il peut y avoir zéro ou plusieurs lignes "Table2" pour une ligne "Table1".
Maintenant, j'essaie de faire une recherche sur l'une des colonnes dans "Table2" dire "email" colonne OU sur l'une des colonnes dans "Table1" dire "adresse" et imprimer "Table1" valeurs de ligne.
Je vois qu'il ya 3 possibilités: 1. 2. Sous Joignez-Query 3. Union
1 Se
SELECT *
FROM Table1 t1, Table t2
WHERE t1.id = t2.tab_id
AND (t1.address like '%str%' OR t2.email like '%str%');
- Cela fonctionne très bien, mais quand il n'y a pas de lignes dans "Table2" correspondant à "Table1" .. le JOIN va échouer, donc la sortie est in-consistante.
2 Sous-Query
SELECT *
FROM Table1 t1
WHERE t1.address like '%str%'
OR t1.id IN (SELECT t2.tab_id
FROM Table2 t2
WHERE t2.email like '%str%');
- Cela fonctionne très bien, mais quand il y a deux rangées Manys dans "Tableau 2" (disons 5 km) la requête va très lent :(
3 Union
SELECT 'relevant_columns'
FROM Table1 t1, Table t2
WHERE t1.id = t2.tab_id
AND (t1.address like '%str%' OR t2.email like '%str%')
UNION
SELECT 'relevant_columns'
FROM Table1 t1
WHERE t1.address like '%str%'
ORDER BY relevant_column
- Cela fonctionne très bien, peut-être créer une vue avec une UNION similaire, fait le travail
N. ow, ma question quelle est la bonne façon ... est-il correct d'appeler UNION toujours?
Engine MySQL: MyISAM
Vous ne savez pas exactement ce que vous essayez de faire, mais cela ressemble à un travail pour une jointure externe, par opposition à une union. Peut-être regarder dans ça? – MJB