gpt4 book ai didi

mysql - SQL View 不太工作

转载 作者:行者123 更新时间:2023-11-29 10:46:26 24 4
gpt4 key购买 nike

这是我的观点声明:

    CREATE 
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SQL SECURITY DEFINER
VIEW `seeallcontent` AS
SELECT
`members`.`MemberID` AS `Member ID`,
`members`.`FirstName` AS `FirstName`,
`members`.`LastName` AS `LastName`,
`centreaddress`.`Location` AS `Location`,
`memlevel`.`level` AS `Membership`
FROM
(((`centreaddress`
LEFT JOIN `centre` ON ((`centre`.`CAddress` = `centreaddress`.`id`)))
LEFT JOIN `members` ON ((`centre`.`memberID` = `members`.`MemberID`)))
JOIN (`memlevel`
LEFT JOIN `membership` ON ((`membership`.`membershipID` = `memlevel`.`ID`))))

它输出所有成员及其中心,然后重复成员资格类型,就好像每个成员都有每种成员资格类型一样。我理解它这样做是因为我没有根据memberID正确排序memlevel,但是我无法让它输出中心和memlevel并将它们与成员进行比较。

如果我删除任何提及成员(member)资格的内容,那么我可以让它生成一份完美的成员(member)及其中心列表。

这是我的数据库 ERD 的示例(我知道您可以在大多数 DBMS 中自动生成它们,这只是一个屏幕截图,因为无论如何我都必须为我的考试项目制作一个屏幕截图)。我正在尝试将所有 3 个表的各个部分放在一起。 enter image description here

最佳答案

首先删除所有这些括号。那看起来很可怕。就像 MS Access 查询一样。那么你的外连接似乎没有意义。您选择中心地址并希望找到没有相关中心的条目?你为什么要这么做?我认为您最好再次阅读外连接。

使用数据选择成员似乎很自然:

CREATE VIEW seeallcontent AS
SELECT
m.memberid AS "Member ID",
m.firstname AS "FirstName",
m.lastname AS "LastName",
ca.location AS "Location",
ml.level AS "Membership"
FROM members m
JOIN membership ms ON ms.memberID = m.memberID
JOIN memlevel ml ON ml.id = ms.levelid
JOIN centre c ON c.memberID = m.memberID
JOIN centreaddress ca ON ca.id = c.caddress;

根据这个查询思考您是否还需要其他东西。也许包括没有成员(member)资格的成员(member)? (这可能吗?那么他们会成为“成员”吗?)好吧,然后外部连接 msml 而不是内部连接它们。您想要没有中心的成员(member)吗?然后外连接cca

当然,对于拥有三个成员(member)资格和两个中心的成员(member)来说,这将为您提供 3 x 2 = 6 行。它将把每个成员(member)资格/级别与每个中心/地址结合起来,但结果可能会是什么样子呢?您必须将结果限制为一个中心/地址或一个成员(member)资格/级别,以避免这种乘法。或者,如果结果不是您想要的,则根本不写此 View 。也许这应该更好地是两个单独的 View 。

关于mysql - SQL View 不太工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44485979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com