2010-10-20 40 views
4

精確查詢:查詢是導致1列空值時,ID未找到

選擇 coupon_couponscode
coupon_couponsdiscountType AS'type',
coupon_couponsdiscountAmount AS'amount',
coupon_couponsdiscountApplied AS'applied',
coupon_couponsdescription
GROUP_CONCAT(coupon_targetskusku隔板。 ';')AS 'targetsku'
FROM coupon_coupons
LEFT JOIN coupon_targetsku ON coupon_couponscode = coupon_targetskucode
其中coupon_couponscode = 'testCode'

coupon_coupons.code =主鍵
coupon_targetsku.code = FK(coupon_coupons.code)

如果coupon_coupons。在數據庫中發現code查詢按預期運行,但是當找不到時,返回的結果集是一行,所有NULL值。我猜它是我做錯了左連接的東西。

我想這個查詢返回零行如果沒有找到代碼。

我用mysql:
Server版本5.1.36社區日誌
協議版本:提前10個

感謝。

回答

4

這是很好的使用group by使用group_concat()

SELECT coupon_coupons.code, 
coupon_coupons.discountType AS 'type', 
coupon_coupons.discountAmount AS 'amount', 
coupon_coupons.discountApplied AS 'applied', 
coupon_coupons.description, 
group_concat(coupon_targetsku.sku separator ';') AS 'targetsku' 
FROM coupon_coupons 
JOIN coupon_targetsku ON coupon_coupons.code = coupon_targetsku.code 
WHERE coupon_coupons.code = 'testCode' 
GROUP BY coupon_coupons.code 
+0

當與組一起使用時,它運行良好,但仍然...當主表中沒有行時爲什麼1返回null的行?它是如何設計出來的? – 2012-12-07 10:50:09

+0

我的情況是我正在顯示一篇文章及其標籤的詳細信息。所以像「and article.id = 5」這樣的條件將只包含主表中的一行。當我給一個錯誤的ID,那麼主表中沒有行存在,但結果仍然是一行的空值...使用它後組效果很好。但爲什麼它返回一個空值的行? – 2012-12-07 10:52:22

0

即使在右表中沒有匹配(coupon_targetsku),LEFT JOIN關鍵字也會返回左表(coupon_coupons)中的所有行。

對於您的情況JOIN是

+0

使用簡單的JOIN語句時,你想要什麼(當有兩個表中至少有一個匹配返回行)導致了相同的結果。 – 2010-10-20 01:49:23

+0

哦,試試取出group_concat。由於concat返回空字符串,可能會返回行。可能替換爲:group_concat(COALESCE(coupon_targetsku.sku,「」)separator';')AS'targetsku' – 2010-10-20 03:21:02

相關問題