我不確定這是否可行,並且描述確實很難。MySQL - 選擇內的子查詢
我想以這種方式返回SELECT
查詢:
pID | Name | Email | Dog Name | Fish Name ------------------------------------------------------- 44 | John | [email protected] | Scruffy | 56 | Jane | [email protected] | | Puffer 72 | Joe | [email protected] | Sparky | Gill
有3個表: tbl_option_fields
tbl_person
tbl_person_optionals
第一個表只定義無限的可選字段。下面是列:
optid | opttitle ------------------ 1 | Dog Name 2 | Fish Name 3 | Email
第二個表只是,我保證數據的人:
pID | Name --------------- 44 | John 56 | Jane 72 | Joe
最後一個表讓我存儲的存在是有pID
ID | pID | optid | optval ---------------------------------- 1 | 44 | 1 | Scruffy 2 | 56 | 2 | Puffer 3 | 72 | 1 | Sparky 4 | 72 | 2 | Gill 5 | 72 | 3 | [email protected] 6 | 56 | 3 | [email protected] 7 | 44 | 3 | [email protected]任何可選數據
SELECT語句的結果需要在結果的標題中顯示opttitle
。 我不擅長子查詢,這可能是一個愚蠢的。
這裏是我的嘗試:
SELECT p.*, opt.optval
FROM `tbl_person` p
LEFT OUTER JOIN `tbl_person_optionals` opt ON p.pID = opt.pID
WHERE 1
此查詢導致重複的結果,我相信我明白爲什麼。
pID | Name | optval ----------------------------- 44 | John | [email protected] 44 | John | Scruffy 56 | Jane | [email protected] 56 | Jane | Puffer 72 | Joe | [email protected] 72 | Joe | Sparky 72 | Joe | Gill
希望我解釋說我想水平顯示可選字段,而不是行中的新記錄。 可以這樣做嗎?
你在找什麼是一個數據透視查詢,但mysql不直接支持它們。有解決方法,但它們會導致醜陋的語法,並且當您在旋轉結果中添加/需要更多列時,它們不會自動放大。 –
這可能是我需要聽到的。謝謝! – coffeemonitor