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

标签 mysql

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

相关文章:

python - MySQL 插入查询 - FLASK

对数据库具有受限权限的 MySQL 用户

java - 在 Java 中进行销售后减少 MySQL 数据库中的库存数量

php - 如何在 cakephp 1.2.6 中回显最后一个查询

php - SQL 语句在 PHP 中不起作用,但在 MySQL 中起作用

MySQL:ORDER BY 空日期 '0000-00-00' 作为最后但其余 ASC

Mysql select,我如何找到在同一列中具有给定值的应用程序名称

php - mysql允许root用户访问,但是拒绝root用户所有权限的访问

mysql - 使用sql语句合并两行

mysql - SqlServer 使用 MySql 创建表,如 auto_increment 主键