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单查询,两表同名的主要内容,如果未能解决你的问题,请参考以下文章