[英]MYSQL SELECT statement inside CONCAT function
我正在嘗試在很大的select語句中執行類似的操作,此代碼段來自查詢的SELECT部分
CONCAT((SELECT alias.`date` FROM alias WHERE id IN(latest_id)),'<-',GROUP_CONCAT(
`alias`.`date` ORDER BY `alias`.`date` DESC SEPARATOR '<-')) AS "date_chain"
但我在“ date_chain”列中為NULL。 如果我只寫這個
GROUP_CONCAT(
`alias`.`date`
ORDER BY `alias`.`date` DESC SEPARATOR '<-') AS "date_chain"
有用。
但是,我想了解這個鏈條開始的最新日期。
添加完整的SQL
SELECT latest_id,CONCAT((SELECT alias.`date`FROM alias WHERE id IN (latest_id)),'<-',
GROUP_CONCAT(
`alias`.`date`
ORDER BY `alias`.`date` DESC SEPARATOR '<-'
)) AS "date_chain" FROM alias WHERE latest_id IS NOT NULL GROUP BY latest_id;
有人可以幫助我,我的第一個語法中缺少什么嗎? 謝謝
當任何適合CONCAT()
函數的NULL
是NULL
-函數的輸出結果為NULL
。 請參閱手冊以供參考。
如果任何參數為NULL,則CONCAT()返回NULL。
嘗試CONCAT_WS()
,您也可以在其中指定分隔符。
CONCAT_WS()不會跳過空字符串。 但是,它會跳過分隔符參數之后的所有NULL值。
但是,請勿將NULL
用作分隔符-否則會導致結果產生NULL
。
評論后編輯
我們確定這樣做的原因是不正確地使用外部查詢列latest_id
作為內部SELECT
的提要。
SELECT alias.`date`FROM alias WHERE id IN (latest_id)
只是將每個id
與同一行中的latest_id
進行比較,而所需的結果是將其與外部SELECT
塊中的列進行比較。
更改后查詢應為
SELECT
latest_id,
CONCAT(
(SELECT alias.`date`FROM alias WHERE id IN (o.latest_id)),
'<-',
GROUP_CONCAT(
`alias`.`date` ORDER BY `alias`.`date` DESC SEPARATOR '<-'
)
)
AS "date_chain"
FROM alias o
WHERE latest_id IS NOT NULL
GROUP BY latest_id;
盡管查詢可以為您提供所需的內容,但這並不是實現此結果的最佳方法。 你應該在大多數情況下,避免使用CONCAT()
因為NULL
值和你的SELECT
外內SELECT
塊作為塔進料將使查詢運行慢(它必須計算每一行的值)。
請考慮以下代碼作為更好的做法,以獲得相同的結果
SELECT
foo.latest_id,
CONCAT_WS('<-', a.date, foo.group_concat) AS date_chain
FROM(
SELECT
latest_id,
GROUP_CONCAT(date ORDER BY date DESC SEPARATOR '<-') AS group_concat
FROM alias
WHERE latest_id IS NOT NULL
GROUP BY latest_id
) foo
LEFT JOIN alias a ON
foo.latest_id = a.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.