Как написать такой запрос? - PullRequest
       5

Как написать такой запрос?

0 голосов
/ 15 декабря 2018

Как вы программируете на SQL, я ничего не понимаю в этом.:)

Table1:

+-----------+----------+------------+
| id        | key      | page       |
+-----------+----------+------------+
| 1         | A        | 123        |
| 2         | B        | 456        |
| 3         | C        | 777        |
+-----------+----------+------------+

Table2:

+-----------+----------+------------+
| id        | key      | page       |
+-----------+----------+------------+
| 1         | A        | 123        |
| 2         | B        | 456        |
| 3         | C        | 111        |
+-----------+----------+------------+

У меня есть 2 таблицы.Мы можем видеть, что они имеют поля с одинаковым «ключом» (A, B, C).Как я могу отфильтровать значение столбца «страницы», которые отличаются в таблице 1 и таблице 2.

Итак, в столбце страницы: 123=123, 456=456, 777<>111 ==> Мне нужна такая таблица, как Результат:

NEW Таблица:

+-----------+---------------------+---------------------+
| id        | id & page_table1    | id & page_table2    |
+-----------+---------------------+---------------------+
| 1         | 3   777             | 3    111            |
+-----------+---------------------+---------------------+

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

Ваш запрос не является "таким сложным".Сначала необходимо объединить обе таблицы в столбце key, а затем выполнить фильтрацию по столбцу page:

SELECT * 
FROM tab1 
JOIN tab2 ON tab1.`key` = tab2.`key`
WHERE tab1.page <> tab2.page;
0 голосов
/ 15 декабря 2018

Если вы хотите новую таблицу с новым идентификатором, вам нужно иметь create table.Я рекомендую другой формат

CREATE TABLE newTable (
  id INT AUTO_INCREMENT,
  oldId int NOT NULL,
  tbl1Page int,
  tbl2Page int,
  PRIMARY KEY (id))


INSERT INTO newTable (oldId, tbl1Page, tbl2Page)
SELECT t1.key, t1.Page, t2.Page 
FROM tab1 t1 INNER JOIN 
     tab2 t2 ON t1.key = t2.key 
WHERE t1.page <> t2.page

Я не рекомендую объединять ID и Page (или любые другие 2 элемента данных) в один столбец.Вы всегда можете объединить данные при запросе.Читайте о нормализации данных

Select concat(f1, ' - ', f2) as combinedData . . .
0 голосов
/ 15 декабря 2018

@ Комментарий LukazSzozda кажется правильным ответом.Но если вы действительно хотите получить именно эти три комментария в результате, вы можете объединить их с помощью функции concat, например:

select a.id,
       concat(a.id, ' ', a.page)
       concat(b.id, ' ', b.page),
from Table1 a
join Table2 b
     on a.id = b.id
     and a.key = b.key
where a.page != b.page
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...