gpt4 book ai didi

MYSQL select所有数据表a if子句表b满足

转载 作者:行者123 更新时间:2023-11-29 18:00:58 26 4
gpt4 key购买 nike

I have a table like below

+-------+   +----------+
| HOTEL | | LOCATION |
+-------+ +----------+
| 1 | | 1 |
| 2 | | 2 |
| 3 | | 3 |
| 4 | | 4 |
| 5 | | 5 |
+-------+ +----------+

+-----------------+
| HOTEL_LOCATION |
+-----------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 4 |
| 3 | 5 |
+-----------------+

如果克劳萨位置是,我想选择酒店和所有位置遇见了。例如:我想通过以下方式选择酒店和所有地点位置 = 1

I want is output:

+-----------------+
| HOTEL_LOCATION |
+-----------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+-----------------+

The output I got was :

+-----------------+
| HOTEL_LOCATION |
+-----------------+
| 1 | 1 |
+-----------------+

Previously I apologize with my bad English

Can someone help me? Thanks

最佳答案

我认为有两个问题:

SELECT h.*, GROUP_CONCAT( DISTINCT l.lokasi_name SEPARATOR ",") AS hotel_lokasi
FROM hotel h
LEFT JOIN lokasi_hotel lh ON lh.lhotel_hotel_id = h.hotel_id
LEFT JOIN lokasi l ON l.lokasi_id = lh.lhotel_lokasi_id
WHERE lh.lhotel_lokasi_id = 1
GROUP BY h.hotel_nama

1

WHERE lh.lhotel_lokasi_id = 1 意味着 lh.lhotel_lokasi_id IS NOT NULL,这使得 LEFT JOIN 毫无意义。

要保留LEFT JOIN,您应该使用:

  FROM hotel h
LEFT JOIN lokasi_hotel lh ON lh.lhotel_hotel_id = h.hotel_id AND lh.lhotel_lokasi_id = 1

但您真正想要的是常规内部联接,因为您当然不想看到所有酒店。

从概念上讲,您可以这样想:ON 子句中的条件在连接之前应用于被连接的表,而 WHERE 子句中的条件应用于连接后的表。加入后的结果集。

2

WHERE lh.lhotel_lokasi_id = 1 表示您只想查看与位置 1 相关的行,但实际情况并非如此:事实上,您希望查看所有行与位置 1 中的酒店相关的行

您需要执行两个步骤:

  1. 了解1位置有哪些酒店
  2. 仅选择这些酒店(如果需要,还可以提供其位置信息)

结论

我猜你想要这样的东西:

SELECT h.*, GROUP_CONCAT( DISTINCT l.lokasi_name SEPARATOR ",") AS hotel_lokasi
FROM hotel h
JOIN lokasi_hotel lh ON lh.lhotel_hotel_id = h.hotel_id
JOIN lokasi l ON l.lokasi_id = lh.lhotel_lokasi_id
WHERE h.hotel_id IN (SELECT lhotel_hotel_id FROM lokasi_hotel WHERE lhotel_lokasi_id = 1)
GROUP BY h.hotel_nama

同样,您可以将 IN 替换为 lokasi_hotel 上的第二个连接:

SELECT h.*, GROUP_CONCAT( DISTINCT l.lokasi_name SEPARATOR ",") AS hotel_lokasi
FROM lokasi_hotel lh_filter
join hotel h ON lh_filter.lhotel_hotel_id = h.hotel_id
JOIN lokasi_hotel lh ON lh.lhotel_hotel_id = h.hotel_id
JOIN lokasi l ON l.lokasi_id = lh.lhotel_lokasi_id
WHERE lh_filter.lhotel_lokasi_id = 1
GROUP BY h.hotel_nama

关于MYSQL select所有数据表a if子句表b满足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com