根据另一个表中的匹配 ID 选择一个 SQL 表中的所有列,如果为 TRUE,则循环遍历所有列

问题描述 投票:0回答:1

我想要使用 officeID 查询 officeSettings 表,然后当 App 为“TRUE” 时,从 apppSettings 表中匹配的 appName 返回数据。回显结果然后循环所有应用程序。

我知道我需要使用 JOIN,但我在匹配 officeID 然后检查是否为 TRUE 时迷失了方向。

办公室设置

办公室ID 应用1 应用2 应用3
101010 正确 正确 错误
951751 正确 错误 错误
648299 错误 正确 正确

应用程序设置

应用名称 图标 网址 链接1 网址1 链接2 网址2
应用1 img/app1.svg # # # # #
应用2 img/app2.svg # # # # #
应用3 img/app2.svg # # # # #
mysql
1个回答
0
投票

您可以使用这样的查询:

SELECT aps.*
FROM officeSettings ofs
JOIN appSettings aps ON
    (ofs.App1 = 'TRUE' AND aps.appName = 'App1') OR
    (ofs.App2 = 'TRUE' AND aps.appName = 'App2') OR
    (ofs.App3 = 'TRUE' AND aps.appName = 'App3')
WHERE ofs.officeID = 648299;

输出:

应用名称 图标 网址 链接1 网址1 链接2 网址2
应用2 img/app2.svg # # # # #
应用3 img/app2.svg # # # # #

此方法的问题在于,要添加另一个应用程序,您必须向

officeSettings
添加另一列,然后向查询添加额外的联接条件。

更好的方法是将

officeSettings
存储为
(officeID, appName)
元组:

办公应用程序

办公室ID 应用名称
101010 应用1
101010 应用2
951751 应用1
648299 应用2
648299 应用3

现在查询不需要了解各个应用程序:

SELECT aps.*
FROM officeApps oa
JOIN appSettings aps ON oa.appName = aps.appName
WHERE oa.officeID = 648299;

仍然输出:

应用名称 图标 网址 链接1 网址1 链接2 网址2
应用2 img/app2.svg # # # # #
应用3 img/app2.svg # # # # #
© www.soinside.com 2019 - 2024. All rights reserved.