mysql - 在两列中查询OR然后返回一个名称

时间:2017-11-12 23:04:48

标签: mysql sql

我对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家伙!谢谢!

2 个答案:

答案 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