[英]SQL query with multiple unrelated tables
在我的mySQL数据库中有四个表: breakfast
, dinner
, supper
, supper
。 这些表的列名是相同的。 其中每个人都有一个名为' accepted
'的列,它等于0
或1
。
我想让SQL查询从这四个表中给出一个随机行WHERE'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的
SELECT 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 RAND() LIMIT 1
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.