簡體   English   中英

連接表和2列表,1列標題,2列值

[英]Join Table With 2-Column Table, 1st Column Header, 2nd Column Value

我有兩個表,如下圖所示,我想對它們執行聯接。 第一個表包含事件,第二個表包含這些事件的屬性。

架構圖

我想編寫一個查詢,將下面的兩個表連接起來,並在底部創建輸出。

在MySQL中有可能嗎 這個問題很難谷歌搜索(甚至想出一個標題!),所以我很抱歉,如果它是重復的。

現在,我有這個:

SELECT * FROM events e LEFT JOIN event_attributes ea ON e.id = ea.event_id WHERE e.id = 1;

產生2行,其中一行帶有time_opened,另一行帶有time_closed。

編輯:我希望這是動態的,所以我可以根據需要添加任意多個屬性,並且該名稱成為列的標題,並且該值成為行的值。

您需要在這里加入2個:

SELECT * 
FROM events e 
LEFT JOIN event_attributes ea1 ON e.id = ea1.event_id 
                               and ea1.attribute_name = 'time_opened'
LEFT JOIN event_attributes ea2 ON e.id = ea2.event_id 
                               and ea2.attribute_name = 'time_closed'
WHERE e.id = 1;

嘗試這個:

SELECT events.id AS id
,      events.description AS description
,      ea_open.value AS time_opened
,      ea_close.value AS time_closed

FROM   events

LEFT JOIN event_attributes AS ea_open
ON  ea_open.id = events.id
AND ea_open.attribute_name = 'time_opened'

LEFT JOIN event_attributes AS ea_close
ON ea_close.id = events.id
AND ea_close.attribute_name = 'time_closed';

您將不得不稍微更改表,但是您可以按照以下步驟進行操作以從兩個表中選擇數據並將其聯接。

SELECT * FROM events, events_attributes WHERE events.id = event_attribute.id

這是指向該主題的更多信息的鏈接: SELECT * FROM multiple table。 的MySQL

您可以嘗試以下方法:

SELECT 
  e.*,
  MAX(IF(ea.attribute_name = 'time_opened', ea.attribute_value, NULL)) AS time_opened,
  MAX(IF(ea.attribute_name = 'time_closed', ea.attribute_value, NULL)) AS time_closed
FROM events e 
  LEFT JOIN event_attributes ea ON e.id = ea.event_id 
WHERE e.id = 1
GROUP BY e.id, e.name, e.description;

暫無
暫無

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

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