当一个表的主键与另一个表的主键包含但不包含在一起时,如何连接表?

时间:2013-02-22 22:38:03

标签: mysql

我正在使用的数据库(但尚未设计)具有奇怪的结构,因为一个表的行的主键(id)包含在另一个表的行的主键中。例如,如果table1有一个id为“933”的行,则table2将有一个id为这样的行,但前缀为一个单词,例如: 'something933'。

SELECT * FROM table1, table2 WHERE table1.id = table2.id

这是基本查询,但因为table1.id的内容类似于'933'而table2.id就像'something933',我需要像WHERE table1.id = table2.something + id。

有没有办法在单个查询中加入这些表?

3 个答案:

答案 0 :(得分:2)

是的,你可以做到这一点,但这是一个非常糟糕的设计。此外,您的查询格式错误,因为您应该真正指定连接条件,而不是使用WHERE子句。在没有指定连接条件的情况下按照您的方式执行操作,就会为您提供表格的笛卡尔积,然后根据您的条件对其进行过滤。所以你可以使用类似的东西:

SELECT * FROM table1
INNER JOIN table2 ON CONCAT('something', table1.id) = table2.id

当然,您将失去在table1上使用索引进行连接的能力(因此设计部分不好)。

如果可以,我只是更新table2上的那些ID以删除前缀。

答案 1 :(得分:0)

我相信你想使用LIKE这个词:

SELECT * FROM table1, table2 WHERE table2.id LIKE CONCAT('%', table1.id, '%');

以下是类似的问题和答案:

How to use an user variables in MySQL LIKE clause?

答案 2 :(得分:0)

SELECT * FROM table1, table2 WHERE table2.id LIKE '%'+table1.id
相关问题