0

我正在使用(但尚未设计)的数据库具有奇怪的结构,因为一个表行的主键 (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 的内容。

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

4

3 回答 3

2

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

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

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

如果可以的话,我会更新 table2 上的那些 id 以删除前缀。

于 2013-02-22T22:42:47.343 回答
0

我相信您想使用 LIKE 词:

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

这是一个类似的问题和答案:

如何在 MySQL LIKE 子句中使用用户变量?

于 2013-02-22T22:42:25.463 回答
0
SELECT * FROM table1, table2 WHERE table2.id LIKE '%'+table1.id
于 2013-02-22T22:43:19.700 回答