如何用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 |
+-----------+---------------------+---------------------+
答案 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