Почему эти две таблицы объединяются в одну таблицу, где отображаются неверные результаты в MySQL? - PullRequest
0 голосов
/ 23 января 2012

У меня есть таблица1 (записи 3) и таблица2 (записи 3).

  • Где у меня есть имя поля в обоих.
  • Теперь я хочу получить результат из этих двух таблиц
  • , который покажет мне обе записи таблицы и возьмет только одну, если есть дубликаты.
  • из этого результата я сделаю основной запрос, используя аналогичные или другие логические выражения
  • Таким образом, мои ожидаемые выходные записи будут содержать 5 строк, а не 6 строк. Как мне это сделать?

Пример:

table1:                       table2:

+-------------------------+   +--------------------------------+
| Name            | ID        | Name            | ID
+--------------------------   +---------------------------------
| A               |  1        | 1 December Name | 4
| B               |  2        | D               | 5
| 1 December Name |  3        | E               | 6


My Expected output is following which works, but does not work when i use WHERE
like to only get '1 December Name':

+-----------------------------------------------------+
| Name               | ID                
+-----------------------------------------------------
| A                  | 1 table1
| B                  | 2 table1
| 1 December Name    | 3 table2 or table1 (no unique)
| D                  | 4 table2
| E                  | 5 table2

Я пробовал это:

SELECT * FROM 
(
    ( 
     SELECT name AS name FROM table1 
    ) 
UNION 
    ( 
     SELECT anothername AS name FROM table2 
    )
) as t
WHERE name like '%1 December Name%'
    limit 1,10

Вывод: Ваш SQL-запрос был успешно выполнен (запрос занял 0,2798 с)

Проблема: в следующем запросе нет ошибок, но он не находит ту запись, которая содержит «Имя 1 декабря»

Продолжение: работает, теперь я знаю, какой идентификатор он использовал

SELECT NAME, ID, STATUS FROM 
(
 (
   SELECT NAME AS name       , id, CONCAT('table1')   AS STATUS FROM table1
 )
UNION ALL
 (
   SELECT ANOTHERNAME AS name, id, CONCAT( 'table2' ) AS STATUS FROM table2
 )
) AS t

WHERE 

 t.NAME LIKE '%1 December Name%'

LIMIT 1 , 10;

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Вы можете получить что-то похожее на то, что вы хотите:

select name, group_concat(id) from
(select name, 'table1' as id from table1
union all 
select name, 'table2' from table2) x
group by name

Вывод будет:

+------------------------------------+
| Name               | ID                
--------------------------------------
| A                  | table1
| B                  | table1
| 1 December Name    | table1,table2
| D                  | table2
| E                  | table2

UNION ALL - правильный выбор (не UNION), потому что не удаляет дубликаты и сохраняет порядок строк

0 голосов
/ 23 января 2012

Попробуйте это (ВЫБРАТЬ name ИЗ таблицы1) UNION (ВЫБРАТЬ name ИЗ таблицы2);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...