我正在使用(但尚未设计)的数据库具有奇怪的结构,其中一个表行的主键 (id) 包含在另一个表行的主键中。例如,如果 table1 有一个 id 为“933”的行,则 table2 将有一个具有类似 id 的行,但以单词为前缀,例如“某事933”。
SELECT * FROM table1, table2 WHERE table1.id = table2.id
这是基本查询,但因为 table1.id 的内容类似于“933”,而 table2.id 类似于“something933”,所以我需要类似 WHERE table1.id = table2.something+id 的内容。
有什么方法可以在单个查询中连接这些表吗?
最佳答案
是的,你可以这样做,但这是一个非常糟糕的设计。此外,您的查询格式错误,因为您实际上应该指定连接条件,而不是为此使用 WHERE 子句。按照您正在做的方式执行此操作,而不指定连接条件,将为您提供表的笛卡尔积,然后您可以根据条件进行过滤。所以你可能会使用类似的东西:
SELECT * FROM table1
INNER JOIN table2 ON CONCAT('something', table1.id) = table2.id
当然,您将无法使用 table1 上的索引进行连接(因此是糟糕的设计部分)。
如果可以的话,我会更新 table2 上的这些 id 以删除前缀。
关于mysql - 当一个表的主键与另一个表的主键不同但包含在另一个表的主键中时,如何连接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034391/