我有一个像下面的桌子


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

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


如果clausa位置是,我想选择酒店和所有位置
遇见。例如:我要选择酒店和所有地点
位置= 1


  我要输出:


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



  我得到的输出是:


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



  以前我对我的英语不好道歉
  
  有人能帮我吗?谢谢

最佳答案

我认为有两个问题:

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中有哪些酒店
仅选择那些酒店(如果需要,请提供其位置信息)


结论

我想你想要类似的东西:

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

08-26 18:16
查看更多