如何在单个查询中 select 多个表 mysql? (有些表还没有数据)
How to select multiple tables in single query mysql? (some tables have no data yet)
我有 3 个 table,分别是 patients
、customers
和 deliveries
。那些 table 位于名为 db
的同一个数据库中。
所有 table 都具有 id
、first_name
、last_name
、gender
并且只有 deliveries
table有自己的数据。 (其他 2 table 目前是空的。)
现在,我想在 1 个查询中 select 所有这些,但是 mysql 抛出一个错误:
SELECT first_name, last_name, gender FROM paitents, customers,
deliveries GROUP BY people LIMIT 0, 50000 Error Code: 1052. Column
'first_name' in field list is ambiguous 0.047 sec .
这是我试过的方法:
SELECT first_name, last_name, gender
FROM patients, customers, deliveries
GROUP BY people;
如何 select 所有 table,即使一些 table 目前没有数据?
All the tables equally have id, first_name, last_name, gender and only deliveries table has their own data. (the other 2 tables are currently empty.)
Now, I want to select all of them in 1 query
我怀疑你在找union all
:
SELECT first_name, last_name, gender FROM patients
UNION ALL
SELECT first_name, last_name, gender FROM customers
UNION ALL
SELECT first_name, last_name, gender FROM deliveries
这将合并结果集中 3 个表中的所有可用记录。另一方面,像你一样使用(隐式)cross join
会生成 3 个表的笛卡尔积,结果集中有 9 列(3 * 3)(也就是说,如果你修复列上的歧义您当前拥有的名字)。
如果要消除跨表的重复项,可以使用 union
而不是 union all
。
如果你想限制结果集中的记录数,你可以这样做:
(
SELECT first_name, last_name, gender FROM patients
UNION ALL
SELECT first_name, last_name, gender FROM customers
UNION ALL
SELECT first_name, last_name, gender FROM deliveries
)
ORDER BY id
LIMIT 5000
请注意,在功能上这确实需要一个 order by
子句,否则结果的排序是不确定的(我假设 id
)。
我有 3 个 table,分别是 patients
、customers
和 deliveries
。那些 table 位于名为 db
的同一个数据库中。
所有 table 都具有 id
、first_name
、last_name
、gender
并且只有 deliveries
table有自己的数据。 (其他 2 table 目前是空的。)
现在,我想在 1 个查询中 select 所有这些,但是 mysql 抛出一个错误:
SELECT first_name, last_name, gender FROM paitents, customers, deliveries GROUP BY people LIMIT 0, 50000 Error Code: 1052. Column 'first_name' in field list is ambiguous 0.047 sec .
这是我试过的方法:
SELECT first_name, last_name, gender
FROM patients, customers, deliveries
GROUP BY people;
如何 select 所有 table,即使一些 table 目前没有数据?
All the tables equally have id, first_name, last_name, gender and only deliveries table has their own data. (the other 2 tables are currently empty.)
Now, I want to select all of them in 1 query
我怀疑你在找union all
:
SELECT first_name, last_name, gender FROM patients
UNION ALL
SELECT first_name, last_name, gender FROM customers
UNION ALL
SELECT first_name, last_name, gender FROM deliveries
这将合并结果集中 3 个表中的所有可用记录。另一方面,像你一样使用(隐式)cross join
会生成 3 个表的笛卡尔积,结果集中有 9 列(3 * 3)(也就是说,如果你修复列上的歧义您当前拥有的名字)。
如果要消除跨表的重复项,可以使用 union
而不是 union all
。
如果你想限制结果集中的记录数,你可以这样做:
(
SELECT first_name, last_name, gender FROM patients
UNION ALL
SELECT first_name, last_name, gender FROM customers
UNION ALL
SELECT first_name, last_name, gender FROM deliveries
)
ORDER BY id
LIMIT 5000
请注意,在功能上这确实需要一个 order by
子句,否则结果的排序是不确定的(我假设 id
)。