假设我有2个表(table1,table2)
两种表结构:
id,name,age
表1有7个条目和表2 10个条目。 我需要从两个表中选择12个行(所有table1行和其余行(5)FROM第二个表) - >来自table2的table1,5的7条记录
我可以使用一个查询从两个表中进行选择吗?
答案 0 :(得分:0)
你应该用UNION来解决它:
SELECT id,name,age FROM table1
UNION
SELECT id,name,age FROM table1
答案 1 :(得分:0)
由于您需要12
行的固定大小输出,因此以下查询应该可以正常工作:
-- MySQL
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2
LIMIT 12
-- MSSQL
SELECT TOP 12 * FROM
(
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2
)
它从Table1
获取所有行,然后将它们与Table2
中的所有行连接起来。通过获取第一个12
行返回最终结果。
这意味着将Table1
中的所有条目都被占用,其余行将填充Table2
中的条目。请注意,如果Table1
包含的12
行数超过12
,则基本上只会使用Table1
中的PHP
行。
或者,您可以使用存储过程或Table1
脚本:
12
12 - count
,则从Table2
DECLARE @numToReplace int = @xmlSource.value('count(//*[local-name(.) eq sql:variable("@NodeName")])', 'int')
行,填写最终结果的剩余行
答案 2 :(得分:0)
UNION 是要走的路。
如果表格具有相同的结构,您可以这样:
SELECT * FROM table1
UNION
SELECT * FROM table2
如果表具有不同的架构(结构),请通过命名来选择所需的字段。它们可能有不同的字段,因此我们将从表格中选择我们需要的字段。 请记住,在这种情况下,来自两个查询的字段的顺序应该是相似的数据类型,并且两个查询都应返回相同数量的列:
SELECT id, name, age FROM table1
UNION
SELECT id, name, age FROM table2
UNION将避免重复数据,因此您将有table1的7个条目和table2中的其余非重复项。 但是如果您无论如何都需要数据,无论重复,都要使用UNION ALL。
PS:阅读有关各种表格合并的SQL JOINS。