簡體   English   中英

MySQL聯接查詢多個值

[英]Mysql join query multiple values

我有一張桌子叫設施 結構如下:

id | name
---------
1 | Hotel
2 | Hospital
3 | medical shop

我還有另一個表,該表從上表中獲取數據,並在一個列中保留多個值。 視圖如下所示:

id | facilities
---------------
1 | Hospital~~medical shop~~Hotel
2 | Hospital~~Hotel
3 | medical shop~~Hotel

如果我想連接這兩個表,查詢看起來如何?

我試過了,但是沒有用:

select overview.facilities as facility 
from overview join facility on facility.id=overview.facilities; 

你可以用一點黑客來做到這一點

select o.facilities as facility 
from overview o 
join facility f on find_in_set(f.facilities, replace(o.facilities, '~~', ',')); 

我強烈建議您更改存儲數據的方式。 目前,它被認為是不規范的,很快就變成了要處理的怪物

您應該更改表結構,使其看起來像這樣

+----------+--------------+
|       facility          |
+----------+--------------+
|     id   |  name        |
+----------+--------------+
|     1    | Hotel        |
|     2    | Hospital     |
|     3    | medical shop |
+----------+--------------+

+-----------+-------------+
|        overview         |
+-----------+-------------+
|    id     | facility_id |
+-----------+-------------+
|     1     |      2      |
|     2     |      3      |
|     3     |      1      |
|     4     |      2      |
|     5     |      1      |
|     6     |      3      |
|     7     |      1      |
+-----------+-------------+

代碼說明:

基本上,您想在概述中找到匹配的設施。 MySQL的一個方便的函數是FIND_IN_SET() ,它允許您在逗號分隔的字符串中找到一個項目,又名find_in_set(25, '11,23,25,26)將返回true,並且將返回匹配的行...您是用定界符~~分隔您的設施,該定界符無法與find_in_set ...一起使用...所以我使用REPLACE()~~更改為逗號,然后在JOIN條件下使用它。 您可以通過多種方式從這里出發。例如,假設您想要概覽的設施ID。.只需添加選擇的GROUP_CONCAT(f.id) ,便擁有所有ID ...請注意,如果這樣做您需要在查詢末尾添加GROUP BY,以告知您如何將結果分組

暫無
暫無

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

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