J'ai une table disons table1
qui a 3 colonnes column1, column2 and column3
.LEFT OUTER JOIN vs SUBSELECT dans MySQL
Les column1
et column2
sont un FOREIGN KEY
avec 2 autres tables. Cependant, les données de column3
proviennent d'un nombre n de tables.
Par exemple. Laissez-nous considérer Facebook. Pour afficher les activités, il peut gérer une table qui peut contenir user1 photoliked photo1
ou user1 statusliked status1
. Donc, dans ce cas column3
ne peut pas être un FOREIGN KEY
avec une table spécifique.
Maintenant il y a 2 façons d'obtenir des données réelles -
1er chemin -
SELECT user_id,
verb_id,
CASE WHEN verb_id = photoliked THEN
(SELECT photo_name FROM photos WHERE photo_id = column3) -- getting the desired data from the third column
WHEN verb_id = statusliked THEN
(SELECT status FROM statustable WHERE status_id = column3)
ELSE '' END AS performedon
FROM table1
JOIN table2 ON user_id = user_id -- joining the first column
JOIN table3 ON verb_id = verb_id -- joining the second column
2ème chemin -
SELECT user_id,
verb_id,
CASE WHEN verb_id = photoliked THEN
p.photo_name
WHEN verb_id = statusliked THEN
s.status
ELSE '' END AS performedon
FROM table1
JOIN table2 ON user_id = user_id -- joining the first column
JOIN table3 ON verb_id = verb_id -- joining the second column
LEFT JOIN photos p ON p.photo_id = column3 -- joining the column3 with specific table
LEFT JOIN statustable s ON s.status_id = column3
Question
Lequel des 2 façons est préférable de récupérer des données? et laquelle des 2 requêtes est moins chère?
possible dupliquer http://stackoverflow.com/a/10684539/1239506 –
Non, il est pas double emploi. Dans cette question, il y a un 'IN' dans la clause' WHERE' et le 'SUBSELECT' ne dépend d'aucune colonne de la requête principale. – JHS
La deuxième requête est meilleure ... –