从MySQL

时间:2015-10-14 13:43:44

标签: mysql sql

我们正在尝试使用PHP和MYSQL构建一个应用程序,我们有超过5个不同的类别明智表,如tblcategory1tblcategory2tblcategory3等等。

每个类别表在所有表中都有一个共同的userID字段。

我们希望在所有表格中检查我们对该特定userID的条目。

是否有任何查询来检查多个表?

谢谢(提前)

2 个答案:

答案 0 :(得分:2)

是的,您需要查看UNION关键字。它大致类似于:

SELECT  columnName
FROM    category1
WHERE   userID = 1

UNION

SELECT  columnName
FROM    category2
WHERE   userID = 1

UNION

SELECT  columnName
FROM    category2
WHERE   userID = 1

这基本上是3个单独的查询,它们都作为一个运行,结果全部连接在一起形成一个结果列表。

了解更多信息:UNION

答案 1 :(得分:1)

@LaurenceFrost答案的另一种结构是使用UNION ALL将表格合并在一起,然后过滤该结果。

SELECT
    columnName
FROM
(
    SELECT userID, columnName FROM tblcategory1
    UNION ALL
    SELECT userID, columnName FROM tblcategory2
    UNION ALL
    SELECT userID, columnName FROM tblcategory3
    UNION ALL
    SELECT userID, columnName FROM tblcategory4
    UNION ALL
    SELECT userID, columnName FROM tblcategory5
)
   ilvCategoryAll
WHERE
   userID = 1

当您拥有JOIN和其他业务逻辑时,这种布局会变得更加友好,您不必为每个源表重复这些逻辑。

另外,应该注意我使用了UNION ALL而不是UNION。这是因为UNION明确删除了重复项,这可能是一个昂贵的过程(即使没有重复项要查找)。但是,UNION ALL不会进行重复数据删除,而且成本也会大大降低。

注意:ilv中的ilvCategoryAll表示" in-line-view"。