如何在单个查询中 select 多个表 mysql? (有些表还没有数据)

How to select multiple tables in single query mysql? (some tables have no data yet)

我有 3 个 table,分别是 patientscustomersdeliveries。那些 table 位于名为 db 的同一个数据库中。

所有 table 都具有 idfirst_namelast_namegender 并且只有 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)。