从一个查询的两个表中选择

时间:2014-06-15 13:51:03

标签: php sql select

假设我有2个表(table1,table2)

两种表结构:

id,name,age

表1有7个条目和表2 10个条目。 我需要从两个表中选择12个行(所有table1行和其余行(5)FROM第二个表) - >来自table2的table1,5的7条记录

我可以使用一个查询从两个表中进行选择吗?

3 个答案:

答案 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。