簡體   English   中英

從MySQL聯接的第一個表獲取所有結果

[英]Get all results from first table in a MySQL join

我有兩張桌子。 我需要從第一張表中選擇所有行(僅一個條件hotel_id = 2),並從第二張表中選擇所有行(基於條件)。 但是我使用的左聯接僅從第二張表中獲取數據。

詢問

 SELECT R.name room_name,
        R.id room_id,
        UD.discount 
   FROM user_discounts UD 
   LEFT 
   JOIN rooms R 
     ON R.id = UD.room_id
  WHERE UD.user_id = 1482
    AND UD.hotel_id = 2

我需要顯示所有房間,但現在在兩個表中顯示公共房間。

如果要所有房間,請反轉表關系

SELECT `R`.`name` as `room_name`, `R`.`id` as `room_id`, `UD`.`discount` as `discount`
FROM  `rooms` as `R`
LEFT JOIN `user_discounts` as `UD` ON `R`.`id`= `UD`.`room_id`
             AND`UD`.`user_id` = '1482'
             AND `UD`.`hotel_id` = '2'

但是,您還需要更改where子句。 它們可以代替您的原始where子句用作連接條件的一部分。

可以很容易地忽略where子句的影響,但是,如果您在where子句中引用左連接表,則還必須允許該表中的數據為NULL。 例如

SELECT `R`.`name` as `room_name`, `R`.`id` as `room_id`, `UD`.`discount` as `discount`
FROM  `rooms` as `R`
LEFT JOIN `user_discounts` as `UD` ON `R`.`id`= `UD`.`room_id`
WHERE (`UD`.`user_id` = '1482'
   AND `UD`.`hotel_id` = '2'
      )
   OR `UD`.`room_id` IS NULL

如果餐桌房間有hotel_id,則:

SELECT `R`.`name` as `room_name`, `R`.`id` as `room_id`, `UD`.`discount` as `discount`
FROM  `rooms` as `R`
LEFT JOIN `user_discounts` as `UD` ON `R`.`id`= `UD`.`room_id`
             AND`UD`.`user_id` = '1482'
             AND `UD`.`hotel_id` = `R`.`hotel_id`
WHERE `R`.`hotel_id` = 2

據我了解,您需要第一張表中的所有數據,而僅第二張表中符合您的條件的數據。

 SELECT `R`.`name` as `room_name`, `R`.`id` as `room_id`, `UD`.`discount` as `discount`
 FROM `rooms` as `R`
 LEFT JOIN `user_discounts` as `UD`  ON `R`.`id`= `UD`.`room_id`
 AND `UD`.`user_id` = '1482'
 AND `UD`.`hotel_id` = '2'

根據您的查詢, where部分將左聯接變為內部聯接,因此您不會從第一張表中獲取所有行,要解決此問題,請在on子句中移動第二張表的過濾器,因此只有符合條件的記錄才是從第二張表返回

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM