2017-09-29 8 views
0

Pourquoi cette requêterequête avec sous-requête ne retourne pas une valeur qui doit être retourné

SELECT * 
FROM tbl X 
WHERE NOT EXISTS (SELECT * FROM tbl Y WHERE X.end_date=Y.start_date) 
ORDER BY accommodation_id, start_date 

ne retourne pas la ligne suivante?

enter image description here

I vérifié la ligne n'a pas été renvoyé en ajoutant AND accommodation_id = 7049 à la clause WHERE, de sorte que la requête résultante est la suivante:

SELECT * FROM wp_byt_accommodation_vacancies X WHERE NOT EXISTS(SELECT * FROM wp_byt_accommodation_vacancies Y WHERE X.end_date=Y.start_date) AND accommodation_id = 7049 ORDER BY accommodation_id, start_date 

I vérifié qu'il n'y a pas de lignes avec start_date = '2017-04-08 pour que accommodation_id utilisant le requête suivante:

SELECT * FROM wp_byt_accommodation_vacancies WHERE accommodation_id = 7049 AND start_date = '2017-04-07' 
+0

S'il vous plaît modifier votre question et indiquer clairement à la fois la production actuelle et attendue, comme _text_, non pas comme des images. –

+0

s'il vous plaît publiez l'échantillon de données des deux tables –

Répondre

1

Vous devez utiliser la suite y

SELECT * 
FROM tbl X 
WHERE NOT EXISTS ( SELECT * 
        FROM tbl Y 
        WHERE X.end_date=Y.start_date 
        AND X.accommodation_id = Y.accommodation_id) 
ORDER BY accommodation_id, start_date 

Vous avez oublié de lier la clé X.accommodation_id = Y.accommodation_id