我正在尝试在LEFT JOIN的ON子句中应用条件条件。我想要达到的目标有点像这样:
伪代码
item_no | type | code | price
1 0 me 10
1 1 my-group 12
1 2 14
2 1 my-group 20
2 2 22
3 2 30
4 0 not-me 40
我希望查询返回该行,如果它匹配任何一个条件(编辑:如果匹配一个,则应省略同一项的其余部分)。
示例数据
销售
item_no | type | code | price
1 0 me 10
2 1 my-group 20
3 2 30
我希望查询返回
prev_month = DATEADD(DimDate[Date].[Date],-1,MONTH)
编辑:销售表用于为单个用户,用户组和/或所有用户应用特殊价格
如果type = 0,则代码包含用户名。 (对于单个用户)
如果type = 1,则代码包含user-group。 (对于组中的用户)
如果type = 2,则代码包含空字符串(对于所有用户)。
答案 0 :(得分:1)
使用以下SQL(假设,表销售在yii中具有唯一的id字段):
SELECT * FROM item AS i
LEFT JOIN sales AS s ON i.sku = s.item_no
AND id = (
SELECT id FROM sales
WHERE item_no = i.sku
AND (type = 0 AND code = 'me' OR
type = 1 AND code = 'my-group' OR
type = 2)
ORDER BY type
LIMIT 1
)
答案 1 :(得分:0)
尝试以下操作 -
SELECT *,SUBSTRING_INDEX(GROUP_CONCAT(s.type ORDER BY s.type),','1) AS `type`, SUBSTRING_INDEX(GROUP_CONCAT(s.code ORDER BY s.type),','1) AS `code`,SUBSTRING_INDEX(GROUP_CONCAT(s.price ORDER BY s.type),','1) AS `price`
FROM item AS i
LEFT JOIN sales AS s
ON i.sku = s.item_no AND (SOME CONDITION)
GROUP BY i.sku