我有一些mysql表:
`items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cat_id_p` int(11) NOT NULL,
`cat_id` int(11) DEFAULT NULL,
`brand_id` int(11) DEFAULT NULL,
...
)
`items_sizes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`item_id` int(11) NOT NULL,
`size_id` int(11) NOT NULL,
`count` int(11) DEFAULT '1',
...
)
我需要选择只有items_sizes.count<的项目。 1,而不是具有至少计数的项目> 1
这是sql查询:
SELECT
DISTINCT `items`.*
FROM
(`items2`)
LEFT JOIN `items_sizes` ON items_sizes`.`item_id` = `items`.`id`
WHERE ...
AND `items_sizes`.`item_id` = items.id
AND `items_sizes`.`count` < 1
GROUP BY `items`.`id`
ORDER BY `items`.`id` desc
LIMIT 30
但它不起作用......我可能需要If声明吗?
解决了!只有SUM和HAVING
SELECT DISTINCT `items`.*, sum(items_sizes.count)
FROM (`items`)
LEFT JOIN `items_sizes` ON `items_sizes`.`item_id` = `items`.`id`
WHERE ...
GROUP BY `items`.`id`
having sum(items_sizes.count)=0
ORDER BY `items`.`id` desc LIMIT 30
答案 0 :(得分:0)
假设您的items2
子句中的表名FROM
是拼写错误,或者items.*
是拼写错误,应该是items2.*
...
您没有聚合函数(SUM(), COUNT(), AVG()
),因此不需要GROUP BY
。您还可以将WHERE
子句与ON
中使用的JOIN
子句混合使用。第一个WHERE
条件不应该存在:
SELECT
DISTINCT items2.*
FROM
items2
LEFT JOIN items_sizes ON items2.id = items_sizes.item_id
WHERE ...
AND items_sizes.count < 1
ORDER BY items2.id desc
LIMIT 30
请注意,我们未看到的WHERE
子句部分(WHERE ...
)在此处可能也很重要...
LEFT JOIN
可能是不必要的,可以只是JOIN
,因为items_sizes.count < 1
会消除NULL
无论如何都会返回的LEFT JOIN
值。
答案 1 :(得分:0)
SELECT
DISTINCT *
FROM
`items`
WHERE
NOT EXISTS (
SELECT * FROM `items_sizes`
WHERE
`items_sizes`.`item_id` = `items`.`id`
AND `items_sizes`.`count` > 0
)
-- ...
ORDER BY `id` desc
LIMIT 30