这里的表格如下:
CREATE TABLE my_table(id INT,project_id VARCHAR(6),order_id VARCHAR(6),user_id VARCHAR(6),owner_id VARCHAR(6));
INSERT INTO my_table
VALUES
(1, 211541, 8614, 1605, 0),
(2, 211541, 8614, 16079, 1605),
(3, 210446, 0, 12312, 0),
(4, 208216, 0, 16467, 14499),
(5, 208216, 0, 14499, 0),
(6, 208216, 0, 14499, 0),
(7, 208216, 0, 16467, 14499),
(8, 209377, 0, 7556, 0),
(9, 209324, 0, 7556, 0),
(10,201038, 8602, 9390, 101);
我必须检查拆分多重条件:
查询以这种方式执行。
order_id!= 0
最初转到project_id,
(即)
1.project_id - 211541然后第一个条件(owner_id = 0),选择user_id
注意:
- 如果没有得到user_id(空结果) - 进入第二个条件
- 如果获得user_id - 不要去第二个条件。
2.project_id - 211541 - 第二个条件(owner_id!= 0),选择owner_id。
我得到了
my_user_id
1605
101
order_id = 0
(即)
1.project_id - 208216然后第一个条件(owner_id = 0),按user_id选择组
注意:
- 如果没有得到user_id(空结果) - 进入第二个条件
- 如果获得user_id - 不要进入第二条状态
2.project_id - 208216 - 第二个条件(owner_id!= 0),按owner_id选择组。
我得到了
my_user_id
12312
14499
7556
7556
最后,我需要这个答案 - 由my_user_id组分组
my_user_id
1605
101
12312
14499
7556
注意:
我需要单一查询。
答案 0 :(得分:0)
为什么不使用IF?
SELECT
IF (order_id = 0, user_id, owner_id) AS new_val
FROM my_table
GROUP BY new_val
当看到它时,似乎你需要更多的ifs ......这样的事情?
SELECT
if(order_id <> 0,
if(owner_id = 0, user_id, owner_id),
if(user_id = 0, owner_id, user_id)
) AS new_val
FROM my_table
group by new_val
这是我从您的条件中理解的
对他们进行编号,然后将他们与if条件我们建立在第二个
中if the order_id is not 0, -- 1
check to see if the owner_id is 0,
if owner_id = 0 -- 2
then pull in user_id -- 3
else owner_id is not 0
and you pull in owner_id -- 4
写这个更像代码..
if(order_id <> 0, if(owner_id <> 0, owner_id, user_id), some condition for when order_id is 0)
其他情况
if the order_id is 0
pull in user_id (grouped)
if user_id = 0 -- 5
then pull in owner_id -- 6
else user_id is not 0
and pull in user_id -- 7
将其与其他部分一起替换为其0时的其他条件。
-- 1 2 3 4 5 6 7
if(order_id <> 0, if(owner_id = 0, user_id, owner_id), if(user_id = 0, owner_id, user_id))
现在要格式化它的可读性
if(order_id <> 0, -- if its not 0
if(owner_id = 0, user_id, owner_id), -- true condition
if(user_id = 0, owner_id, user_id) -- false condition
)
我是对的吗?
答案 1 :(得分:-1)
您可以使用&#39; if&#39;。 例如
@result=if(1!=2,'yes','no');
哪会给结果一个值'是'&#39;。 这些可以嵌套以创建复杂的条件:
SET @value_a='no';
set @value_b='';
set @value_c=’test’;
SET @value_d=’’;
set @result=
(
select if(@value_a!=’no’,(SELECT column1 FROM table1 WHERE id= @value_a),
if(@value_b!='',@value_b,
if(@value_c!='',(select column2 from table2 where id=@value_a),
if(@value_d!='',(select column3 from table3 where id=@value_a),
‘I am a default value’
)
)
)
)
);
从table2中给出select = @ value_a的select column2。