【问题标题】:Selecting data from various tables without multiple queries从各种表中选择数据而无需多次查询
【发布时间】:2012-07-09 20:14:28
【问题描述】:

MySQL - 工作台 (PHP):

表格:

  1. TUsers(与 TCompanies 的一对多关系):
    • TUsers_CompanyID(外键)
    • TUsers_UserName
    • TUsers_UserPassword
    • TUsers_ID(唯一)
  2. T 公司:
    • TCompanies_CompanyName
    • TCompanies_CompanyContactNumber
    • TCompanies_CompanyAddress
    • TCompanies_ID(唯一)

是否可以在不使用 JOIN 或 INNER JOIN 查询命令而不复制表中的数据的情况下链接关系数据库中的多个表?

因此,甚至是另一种创建关系的方式,使一个表“指向”另一个表的数据。

这样就可以查询以下内容,并一次成功地从两个表中检索所有数据:

MySQL:SELECT * FROM TUsers;

见上例..

【问题讨论】:

  • 您可以使用子查询。但是JOIN 的设计正是为了满足您的要求。

标签: php mysql mysql-workbench


【解决方案1】:

您可以在不“出现”的情况下使用连接(即,单词 JOIN 不会出现在查询中),但 MySQL 仍将执行 JOIN...

SELECT *
FROM TUsers, TCompanies 
WHERE TUsers_CompanyID=TCompanies_ID;

【讨论】:

  • +1,不过这叫implicit join,实际上是JOIN
【解决方案2】:

您将无法避免使用JOIN 来显示您的数据,但您可能想要做的是创建所谓的VIEW,这样您就不会实际上,只要您想查询用户数据,就必须输入JOIN 命令:

CREATE VIEW UsersView AS
SELECT *
FROM TUsers a
INNER JOIN TCompanies b ON a.TUsers_CompanyID = b.TCompanies_ID

然后,一旦定义了视图,您就可以像这样从UsersView 中选择:

SELECT * FROM UsersView

...它会返回用户信息以及加入的公司信息。您可以将视图视为简化(或“压缩”)更复杂查询的一种方式,因为在底层,它实际上与以下内容相同:

SELECT *
FROM
(
    SELECT *
    FROM TUsers a
    INNER JOIN TCompanies b ON a.TUsers_CompanyID = b.TCompanies_ID
) UsersView

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2021-01-06
    • 2016-10-15
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多