Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 左联接未返回正确的结果集_Mysql_Sql - Fatal编程技术网

Mysql 左联接未返回正确的结果集

Mysql 左联接未返回正确的结果集,mysql,sql,Mysql,Sql,我有两张桌子,一张是给聚会的,另一张是给客人的 第一个表是使用以下语法创建的: CREATE TABLE `party` ( `party_id` int(10) unsigned NOT NULL, `details` varchar(45) NOT NULL, PRIMARY KEY (`party_id`) ) CREATE TABLE `guests` ( `user_id` int(10) unsigned NOT NULL, `name` varchar(45)

我有两张桌子,一张是给聚会的,另一张是给客人的

第一个表是使用以下语法创建的:

CREATE TABLE `party` (
  `party_id` int(10) unsigned NOT NULL,
  `details` varchar(45) NOT NULL,
  PRIMARY KEY (`party_id`)
)
CREATE TABLE `guests` (
  `user_id` int(10) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `party_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`user_id`,`party_id`),
  UNIQUE KEY `index2` (`user_id`,`party_id`),
  KEY `fk_idx` (`party_id`),
  CONSTRAINT `fk` FOREIGN KEY (`party_id`) REFERENCES `party` (`party_id`)
)
第二个表具有以下语法:

CREATE TABLE `party` (
  `party_id` int(10) unsigned NOT NULL,
  `details` varchar(45) NOT NULL,
  PRIMARY KEY (`party_id`)
)
CREATE TABLE `guests` (
  `user_id` int(10) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `party_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`user_id`,`party_id`),
  UNIQUE KEY `index2` (`user_id`,`party_id`),
  KEY `fk_idx` (`party_id`),
  CONSTRAINT `fk` FOREIGN KEY (`party_id`) REFERENCES `party` (`party_id`)
)
现在,我想用一个声明,从一部分派对(可能在声明中使用)中获取客人参加过或根本没有参加过的派对

我正在使用此查询:

SELECT 
party.party_id, party.details, 
guests.user_id, guests.name
FROM party
LEFT JOIN guests
ON party.party_id = guests.party_id 
where 
party.party_id IN (1,2,3) 
and (guests.user_id=23123 or guests.user_id is null) ORDER BY party.party_id;
这个查询的问题是只返回用户23123没有参与的行,其他人没有参与的行

我希望在结果集中有第1、2和3方,因为用户23123没有参与。 如何做到这一点

某些插入数据可能有助于调试问题:

INSERT INTO `party` (`party_id`, `details`) VALUES ('1', 'nice party');
INSERT INTO `party` (`party_id`, `details`) VALUES ('2', 'pizza');
INSERT INTO `party` (`party_id`, `details`) VALUES ('3', 'end');
INSERT INTO `party` (`party_id`, `details`) VALUES ('4', 'party four');
INSERT INTO `party` (`party_id`, `details`) VALUES ('5', 'secret');
INSERT INTO ``party` (`party_id`, `details`) VALUES ('6', 'downtown');


INSERT INTO `guests` (`user_id`, `name`, `party_id`) VALUES ('100', 'u100', '1');
INSERT INTO `guests` (`user_id`, `name`, `party_id`) VALUES ('101', 'u101', '1');
INSERT INTO `guests` (`user_id`, `name`, `party_id`) VALUES ('102', 'u102', '1');
INSERT INTO `guests` (`user_id`, `name`, `party_id`) VALUES ('200', 'u200', '2');
INSERT INTO `guests` (`user_id`, `name`, `party_id`) VALUES ('100', 'u100', '2');
INSERT INTO `guests` (`user_id`, `name`, `party_id`) VALUES ('100', 'u100', '6');
INSERT INTO `guests` (`user_id`, `name`, `party_id`) VALUES ('500', 'u500', '6');
第二个表上的筛选应在
on
子句中:

SELECT p.party_id, p.details, g.user_id, g.name
FROM party p LEFT JOIN
     guests g
     ON p.party_id = g.party_id AND g.user_id = 23123
WHERE p.party_id IN (1,2,3) 
ORDER BY p.party_id;

很棒的工作。这意味着返回的行将始终与in子句中的party_id相等(如果parties表中存在这些id)。