Mysql 具有多个不相关表的SQL查询

Mysql 具有多个不相关表的SQL查询,mysql,select,multiple-tables,multiple-conditions,Mysql,Select,Multiple Tables,Multiple Conditions,在我的mySQL数据库中有四个表:早餐,晚餐,晚餐,晚餐。 这些表的列名相同。其中每个人都有一个名为“accepted”的列,该列等于0或1 我想进行SQL查询,从这四个表中随机得到一行 其中“accepted”列等于0 只有1个表可用的SQL查询: SELECT * FROM breakfast WHERE accepted=0 ORDER BY RAND() LIMIT 1 我的SQL查询版本有四个不起作用的表: SELECT * FROM breakfast, dinner, supp

在我的mySQL数据库中有四个表:
早餐
晚餐
晚餐
晚餐
。 这些表的列名相同。其中每个人都有一个名为“
accepted
”的列,该列等于
0
1

我想进行SQL查询,从这四个表中随机得到一行 其中“accepted”列等于0

只有1个表可用的SQL查询:

SELECT * FROM breakfast WHERE accepted=0 ORDER BY RAND() LIMIT 1
我的SQL查询版本有四个不起作用的表:

 SELECT * FROM breakfast, dinner, supper, dessert WHEREbreakfast.accepted=0
AND dinner.accepted=0 AND supper.accepted=0 AND dessert.accepted=0 ORDER BY RAND() LIMIT 1
试着这样,

我假设您在所有四个表中的列数都是相同的

MySQL

SQL Server:

SELECT top 1 col1,col2
FROM (
    SELECT col1,col2
    FROM breakfast
    WHERE breakfast.accepted = 0

    UNION

    SELECT col1,col2
    FROM dinner
    WHERE dinner.accepted = 0

    UNION

    SELECT col1,col2
    FROM supper
    WHERE supper.accepted = 0

    UNION

    SELECT col1,col2
    FROM dessert
    WHERE dessert.accepted = 0
    ) T
ORDER BY newid()
试试这个:

SELECT breakfast FROM 
(SELECT breakfast FROM breakfast WHERE accepted=0 
union
SELECT supper as breakfast FROM supper WHERE accepted=0 
union
SELECT dessert as breakfast FROM dessert WHERE accepted=0 
union
SELECT dinner as breakfast FROM dinner WHERE accepted=0 
) food ORDER BY RAND() LIMIT 1 
在这个查询中,我不认为早餐表中有一个名为“早餐”的字段,如果您需要使用“*”请使用别名使所有字段名称在不同的联合查询中相似。

检查此项

 SELECT TOP 1 * FROM breakfast,
 (SELECT TOP 1 * FROM dinner WHERE accepted=0 ORDER BY RAND()) As Dinner,
 (SELECT TOP 1 * FROM supper WHERE accepted=0 ORDER BY RAND()) As supper,
 (SELECT TOP 1 * FROM dessert WHERE accepted=0 ORDER BY RAND()) As dessert 
 WHERE breakfast.accepted=0 ORDER BY RAND()  

这些表是否有相同的列?决定您使用的RDBMS。请指定每个表中的列,当我们使用union时,您必须对不同要求的字段使用相同的名称,因为我们需要字段名称来提供别名
 SELECT TOP 1 * FROM breakfast,
 (SELECT TOP 1 * FROM dinner WHERE accepted=0 ORDER BY RAND()) As Dinner,
 (SELECT TOP 1 * FROM supper WHERE accepted=0 ORDER BY RAND()) As supper,
 (SELECT TOP 1 * FROM dessert WHERE accepted=0 ORDER BY RAND()) As dessert 
 WHERE breakfast.accepted=0 ORDER BY RAND()