我对mysql查询有疑问。我要编写一个mysql查询,在两列中搜索2个案例,然后这两列的返回数据应该具有相同的名称。我目前的查询想法是这样的:
SELECT * FROM `Table`
WHERE (name=test AND `first_col` is NOT NULL) OR (name=test AND `second_column` is NOT NULL)
然后我就是这样的结果:
| id | name | first_col | second_col |
+----+-------+---------------+-------------+
| 1 | test | [unused_data] | [data] |
+----+-------+---------------+-------------+
| 2 | test | [data] | unused_data]|
+----+-------+---------------+-------------+
所以我想要这样的东西
| id | name | col |
+----+-------+---------+
| 1 | test | [data] |
+----+-------+---------+
| 2 | test | [data] |
+----+-------+---------+
事件如果相同的id但是它与上面的两个条件相匹配,它应该显示在单独的行中。
| id | name | col |
+----+-------+---------+
| 1 | test | [data] |
+----+-------+---------+
| 2 | test | [data] | // from first_col
+----+-------+---------+
| 2 | test | [data] | // from second_col
+----+-------+---------+
我需要你的帮助,mysql家伙!谢谢!
答案 0 :(得分:1)
将您的查询拆分为两个(每列一个),并将它们与UNION ALL
:
SELECT id, name, first_col as col
FROM `Table`
WHERE name ='test' AND first_col is NOT NULL
UNION ALL
SELECT id, name, second_column as col
FROM `Table`
WHERE name='test' AND second_column is NOT NULL
ORDER BY id -- optional
答案 1 :(得分:1)
没有工会的替代方案
SELECT
d.id
, d.NAME
, d.col
FROM (
SELECT
t.id
, t.NAME
, CASE
WHEN e.xtra = 'a' THEN t.first_col
WHEN e.xtra = 'b' THEN t.second_col
END AS col
FROM table1 t
CROSS JOIN (select 'a' xtra union all select 'b') AS e
WHERE NAME = test
) d
WHERE d.col IS NOT NULL