gpt4 book ai didi

mysql - 查询两个表的数据不起作用,只查询单个表的数据起作用

转载 作者:行者123 更新时间:2023-11-30 00:22:16 24 4
gpt4 key购买 nike

这是我的导出。

CREATE TABLE IF NOT EXISTS `table1` (
`order_id` int(7) NOT NULL DEFAULT '0',
`order_date` varchar(8) DEFAULT NULL,
`tkt_order_id` int(9) DEFAULT NULL,
`event_date` varchar(8) DEFAULT NULL,
`event_name` varchar(6) DEFAULT NULL,
`event_year` int(4) DEFAULT NULL,
`mail` varchar(60) NOT NULL,
`quantity` int(3) DEFAULT NULL,
`ticket_type` varchar(7) DEFAULT NULL,
`ticket_days` varchar(9) DEFAULT NULL,
`ticket_subtype` varchar(18) DEFAULT NULL,
`base` varchar(10) DEFAULT NULL,
`service` varchar(10) DEFAULT NULL,
`gross` varchar(10) DEFAULT NULL,
PRIMARY KEY (`order_id`),
UNIQUE KEY `order_id` (`order_id`) USING BTREE,
KEY `email` (`mail`,`order_date`,`event_name`,`event_year`,`quantity`,`ticket_type`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `table2` (
`mail` varchar(60) NOT NULL DEFAULT '',
`first_name` varchar(27) DEFAULT NULL,
`lastname` varchar(20) DEFAULT NULL,
`address` varchar(63) DEFAULT NULL,
`address2` varchar(38) DEFAULT NULL,
`city` varchar(27) DEFAULT NULL,
`state` varchar(22) DEFAULT NULL,
`zip` varchar(10) DEFAULT NULL,
`country` varchar(20) DEFAULT NULL,
`phone` varchar(16) DEFAULT NULL,
PRIMARY KEY (`mail`),
UNIQUE KEY `mail` (`mail`) USING BTREE,
KEY `index` (`first_name`,`lastname`,`city`,`state`,`zip`,`country`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



ALTER TABLE `table1`
ADD CONSTRAINT `table1_ibfk_1` FOREIGN KEY (`mail`) REFERENCES `table2` (`mail`) ON DELETE NO ACTION ON UPDATE NO ACTION;

最佳答案

您忘记在 where 子句中包含外键上有意义的链接:

db.sales.mail = db.customers.mail

此外,使用方括号将条件分组在一起。像 cond1 OR cond2 AND cond3 这样的东西可能不会按预期工作,因此例如您可以将其写为 (cond1 OR cond2) AND cond3

所以像这样的东西应该有效:

SELECT db.customers.first_name, 
db.customers.last_name,
db.customers.mail,
db.sales.event_year,
db.sales.ticket_type,
db.sales.event_name
FROM db.sales, db.customers
WHERE db.sales.mail = db.customer.mail
AND (db.sales.ticket_type = "ticket1"
OR db.sales.ticket_type = "ticket2"
OR db.sales.ticket_type = "ticket3")
AND (db.sales.event_year=2009
OR db.sales.event_year=2010)

虽然上面的代码应该可以工作,但最好这样写(主要是为了可读性):

SELECT c.first_name, 
c.last_name,
c.mail,
s.event_year,
s.ticket_type,
s.event_name
FROM db.sales s
INNER JOIN db.customer c ON s.mail = c.mail
WHERE s.ticket_type IN ('ticket1','ticket2','ticket3')
AND s.event_year IN (2009,2010);

注意:我只是删除了查询中最后的GROUP BY,因为我不知道您想用它来完成什么。如果您使用GROUP BY,它应该至少在所有非聚合函数的选定列上(例如SUMCOUNT等)

关于mysql - 查询两个表的数据不起作用,只查询单个表的数据起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23141799/

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