2017-08-16 2 views
0

Cette requête Tout sélectionner dans ma première table où l'identifiant de ligne ne marche pas existe dans mon deuxième table:Regrouper deux SELECT

SELECT * 
FROM table1 
WHERE NOT EXISTS (SELECT idTable1 FROM table2 WHERE table1.id=idTable1 

Cette requête sélectionner toute la ligne de table1 qui existe dans le table2 avec le dernier identifiant de table2 (cause d'une rangée de table1 peut avoir plusieurs rangs de la table2 mais seul le dernier est oublie pas):

SELECT * 
FROM table2 
    INNER JOIN table 1 ON idTable1 = table1.id 
WHERE table2.id IN (SELECT MAX(actioncur.id) FROM table2 GROUP BY idTable1) 

Je veux regrouper les deux dans une requête, je veux tout sélectionner rangée de table1 quand doesnt id existe dans table2 et sélectionnez tous les table1 pour le dernier id table2. Par exemple je veux sélectionner ça: ligne 1 -> id = 44; table2.id = 187; idTable1 = 44. Ligne 2 -> id = 45; table2.id =? ; idTable1 =?

+4

montrent des données fictives et les résultats attendus – OzLa

+1

lecture sur SQL UNION ... https: //www.w3schools.com/sql/sql_union.asp – Roy

+0

Roy je ne peux pas utiliser l'UNION faire la requête à la fois n'avez pas le numéro de la colonne sam –

Répondre

0

Si je comprends bien, vous pouvez utiliser une sous-requête corrélative:

SELECT t1.*, 
     (SELECT MAX(t2.id) 
     FROM table2 t2 
     WHERE t1.id = t2.idTable1 
     ) as max_t2id 
FROM table1 t1; 

Vous pouvez aussi le faire avec LEFT JOIN et GROUP BY:

SELECT t1.*, MAX(t2.id) as max_t2id 
FROM table1 t1 JOIN 
    table2 t2 
    ON t1.id = t2.idTable1 
GROUP BY t1.id;