SQL Birleştirme Sorunu Bire Çok ilişkisi

0

Soru

Tarih aralığı tarafından filtre ve dönüş o aralığı dahil olmayan tüm ürünleri bu iki tablo ürün ve çekinceleri var, ama bir tarih aralığı içine dahil değil tüm ürünleri almak istiyorum, belirli bir ürün ile ilgili rezervasyon ulaşmak için birleşim sol kullanıyorum, hatta birkaç ürün var, ve çoğu durumda bu ürünleri hiçbir rezervasyon ile ilgili değil, biraz bununla kayboldum:

SELECT
    p.idProduct, p.name, p.description, p.latitude, p.longitude, p.address,
    p.qualification, p.favourite,p.idCategory,p.idCity, p.rules, p.health, p.politics,
    r.idReservation
FROM
    product p 
LEFT JOIN 
    city c ON c.idCity = p.idCity 
LEFT JOIN 
    reservation r ON r.idProduct = p.idProduct 
WHERE
    p.idCity = 1 
    AND ((r.endDate < '2021-11-20' AND r.startDate< '2021-11-28')  
         OR 
         (r.endDate > '2021-11-28' AND r.startDate > '2021-11-20'));

Bu durumda, örneğin, bu tarihlerde rezervasyon yoktur, ancak herhangi bir rezervasyonla ilişkisi olmayan birden fazla ürün vardır.

Bir ürün sıfır veya çok sayıda rezervasyonla ilgili olabilir.

Bu konuda herhangi bir ipucunu takdir edeceğim.

left-join sql
2021-11-22 23:35:16
1

En iyi cevabı

0

(Peki ya senin mantığına ihtiyacın var mı belli değil) eğer ne demek, EĞER rezervasyon zorunlu değildir, o zaman koşullar bunu zorunlu olmasına gerek yok. Onları SOLA taşı BİRLEŞTİR

select p.idProduct, p.name, p.description, p.latitude, p.longitude, p.address,
             p.qualification, p.favourite,p.idCategory,p.idCity, p.rules, p.health, p.politics,
             r.idReservation
             from product p 
            LEFT JOIN city c ON c.idCity = p.idCity 
            LEFT JOIN reservation r ON r.idProduct = p.idProduct AND ( 
            (r.endDate < '2021-11-20' AND r.startDate< '2021-11-28') OR 
            (r.endDate > '2021-11-28' AND r.startDate > '2021-11-20') 
            )
            where p.idCity = 1 
            ;
2021-11-22 23:52:56

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................