如何编写这样的查询?

k2fxgqgv  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(276)

你怎么用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        |
+-----------+----------+------------+

我有两张table。我们可以看到,它们的字段具有相同的“键”(a、b、c)。如何筛选表1和表2中不同的“页面”列的值。
所以,在页面列中: 123=123, 456=456, 777<>111 ==>我想要这样的表作为结果:
新建表:

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

js5cn81o1#

@卢卡佐兹达的评论似乎是正确的答案。但是,如果您真的希望结果中正好包含这三个注解,可以使用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
qkf9rpyu

qkf9rpyu2#

如果您想使用新id创建新表,则需要 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 . . .
ztigrdn8

ztigrdn83#

你的问题不是“那么难”。首先,您需要连接上的两个表 key 列,然后使用 page 列:

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

相关问题