Запрос приводит к 1 строке с нулевыми значениями, когда идентификатор не найден - PullRequest
4 голосов
/ 20 октября 2010

Точный запрос:

SELECT coupon_coupons. code,coupon_coupons. discountType КАК «тип»,coupon_coupons. discountAmount КАК «сумма»,coupon_coupons. discountApplied КАК «применяется»,coupon_coupons. description,group_concat (coupon_targetsku. sku разделитель ';') AS 'targettsku'ОТ coupon_couponsLEFT JOIN coupon_targetsku ON coupon_coupons. code = coupon_targetsku. codeГДЕ coupon_coupons. code = 'testCode'

coupon_coupons.code = первичный ключcoupon_targetsku.code = fk (coupon_coupons.code)

Если в базе данных обнаружен coupon_coupons. code, запрос работает так, как ожидалось, но когда он не найден, возвращаемый набор результатов представляет собой одну строку со всеми значениями NULL.Я думаю, что-то не так с левым соединением.

Я бы хотел, чтобы этот запрос возвращал ноль строк, если код не найден.

Я использую mysql:Версия сервера 5.1.36-community-logВерсия протокола: 10

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 21 октября 2010

Хорошо использовать 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 голосов
/ 20 октября 2010

Ключевое слово LEFT JOIN возвращает все строки из левой таблицы (coupon_coupons), даже если в правой таблице нет совпадений (coupon_targetsku).

Для вашей ситуации JOIN - это то, что вам нужно (возвращает строки, если в обеих таблицах есть хотя бы одно совпадение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...