ON子句中的条件条件

时间:2017-01-05 10:41:02

标签: mysql yii2

我正在尝试在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,则代码包含空字符串(对于所有用户)。

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