MySql单查询,两表同名

Posted

技术标签:

【中文标题】MySql单查询,两表同名【英文标题】:MySql single query, two tables same field name 【发布时间】:2015-02-17 23:49:20 【问题描述】:

我有两个数据库表,一个称为客户端,另一个称为用户。我正在尝试从两个表中选择单个字段“电子邮件”。请注意,该电子邮件字段在两个表中。

Table clients 包含 10 条记录,而 users 有 5 条记录。

下面的查询有效,但由于某种原因记录是重复的,所以我最终得到了 50 条记录,而不是总共 15 条记录。似乎一个表中的记录乘以另一表中的记录。

SELECT 
  clients.email,
  users.email 
FROM
  clients,
  users;

任何帮助将不胜感激。

【问题讨论】:

您需要一个联接或 where 子句。查看en.wikipedia.org/wiki/Join_%28SQL%29 由于您没有应用任何条件或联接,因此查询必然会返回两个表中的所有电子邮件字段。 我想从两个表中返回电子邮件字段。这就是重点,但不是 15 个结果,而是 50 个。每条记录重复 x10 【参考方案1】:

您的查询返回 cartesian product

您可以简单地使用union all

select email from clients
union all
select email from users

【讨论】:

我收到“一般错误:1271 操作 'UNION' 的排序规则的非法混合” 看起来您在表和列上都有不同的排序规则。更改它们的排序规则并使它们相同。 ***.com/questions/1294117/…***.com/questions/742205/mysql-alter-table-collation【参考方案2】:

您将获得 50 行,因为那里正在发生交叉连接,请根据您的选择进行内连接或左连接或右连接,最好是内连接... 采取一些共同的属性,如 id 或其他东西......

select clients.email, users.email from clients,users where clients.id=users.id...

【讨论】:

【参考方案3】:

尝试重命名字段

对于客户表

clients_email

对于用户表

users_email

然后查询为

SELECT clients.clients_email, users.users_email FROM clients, users WHERE clients.clients_email = users.users_email;

希望对你有帮助

【讨论】:

为什么需要重命名? 我从来没有说过它是必需的..我说尝试重命名......这意味着如果他愿意,他可以这样做......这不是必须的

以上是关于MySql单查询,两表同名的主要内容,如果未能解决你的问题,请参考以下文章

Mysql两表 join 查询方式

浅析MySQL多次查询和关联查询的效率问题

浅析MySQL多次查询和关联查询的效率问题

浅析MySQL多次查询和关联查询的效率问题

mysql七种常用的JOIN查询

TypeORM 无关联关系的mysql多表连接查询