簡體   English   中英

SQL查詢以形成數據

[英]A sql query to form data

MySQL的:

Table_A
------------
id name
1  Name1
2  Name2


Table_B
------------
a_id type  value
1    width  100
1    height 100
1    color  red
2    width  50
2    height 80

未知Table_B中存在多少個類型值。

如何獲得結果為:

id  name  width height  color
1  Name1  100  100      red
2  Name2  50    80      null
SELECT a.id, a.name, b_Width.value AS width, b_Height.value AS height, b_color.value AS color
FROM Table_A AS a
JOIN Table_B AS b_Width
   ON b_Width.a_id = a.id AND b_Width.type = 'width'
JOIN Table_B AS b_Height
   ON b_Height.a_id = a.id AND b_Height.type = 'height'
JOIN Table_B AS b_Color
   ON b_Color.a_id = a.id AND b_Color.type = 'color'

但是請認真考慮重新設計架構。 價值在於保持顏色和線性尺寸,最好以不同的方式設計。

保持TableA不變,但是有一個名為Details的表,該表具有width / height / color列。 或者有一個名為Size的表,該表具有寬度/高度列,而又有一個名為Color的表,具有顏色名稱或RGB值。 當然,每個其他表都具有TableA的FK,可以或可以不用作該表的PK。

好吧,我不建議對數據庫使用EAV反模式,因為它基本上將非結構化數據保存在結構化數據庫中,但是我之前不得不與之抗衡,所以這比內部聯接要快得多

選擇a.id,a.name,max(當b.type ='height'然后b.value結束時的情況)作為高度,max(當b.type ='width'然后b.value結束時的情況)作為寬度,最大(如果b.type ='color'然后b.value結束的情況)為test.tablea a,test.tableb b中的顏色,其中a.id = b.a_id由a.id分組

將選擇查詢與子查詢一起使用

像select id,Name(從table_B選擇類型,其中a_id = table_A.id並選擇type ='width')作為table_A的寬度

像這樣,您可以添加其他需要的列

暫無
暫無

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

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