怎么写这样的查询?

时间:2018-12-15 18:59:26

标签: mysql sql

如何用SQL编程,我对它一无所知。 :)

表1:

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

表2:

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

我有2张桌子。我们可以看到它们的字段具有相同的“键”(A,B,C)。如何过滤表1和表2中不同的“页面”列的值。

因此,在页面列中: 123=123, 456=456, 777<>111 ==>我想要这样的表作为结果:

新表格:

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

3 个答案:

答案 0 :(得分:2)

@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

答案 1 :(得分:1)

您的查询并非“如此困难”。首先,您需要在key列上连接两个表,然后使用page列进行过滤:

SELECT * 
FROM tab1 
JOIN tab2 ON tab1.`key` = tab2.`key`
WHERE tab1.page <> tab2.page;

答案 2 :(得分:1)

如果要使用具有新ID的新表,则需要具有["url1", "url2", ...] 。我建议使用其他格式

create table

我不建议将ID和Page(或任何其他2个数据段)组合到一列中。查询时始终可以合并数据。了解有关数据标准化的信息

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