SQL 查询多个不相关的表
SQL query with multiple unrelated tables
在我的 mySQL 数据库中有四个 table:breakfast
、dinner
、supper
、supper
。
这些 table 的列名是相同的。他们每个人都有一个名为“accepted
”的列,它等于 0
或 1
.
我想进行 SQL 查询,从这四个 table 中给我一个随机行
WHERE 'accepted' 列等于 0。
SQL 查询只有 1 个 table 有效:
SELECT * FROM breakfast WHERE accepted=0 ORDER BY RAND() LIMIT 1
我的 SQL 查询版本有四个 table 不起作用:
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 服务器:
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
在这个查询中我排除了 table breakfast 中有一个名为 breakfast 的字段,如果您需要使用“*”,请使用别名使所有字段名称在不同的联合查询中相似。
检查这个
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()
在我的 mySQL 数据库中有四个 table:breakfast
、dinner
、supper
、supper
。
这些 table 的列名是相同的。他们每个人都有一个名为“accepted
”的列,它等于 0
或 1
.
我想进行 SQL 查询,从这四个 table 中给我一个随机行 WHERE 'accepted' 列等于 0。
SQL 查询只有 1 个 table 有效:
SELECT * FROM breakfast WHERE accepted=0 ORDER BY RAND() LIMIT 1
我的 SQL 查询版本有四个 table 不起作用:
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 服务器:
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
在这个查询中我排除了 table breakfast 中有一个名为 breakfast 的字段,如果您需要使用“*”,请使用别名使所有字段名称在不同的联合查询中相似。
检查这个
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()