如果连接的任何一方存在,我需要加入2个将返回行的MySQL表,如果两边都存在,则只返回一行。
这是一个简单的例子:
CREATE TABLE `a` (
`id` INT(11) ,
`qty` INTEGER DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `b` (
`id` INT(11) ,
`price` DECIMAL(8,2) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `a`(`id`,`qty`) VALUES (1,1),(3,0);
INSERT INTO `b`(`id`,`price`) VALUES (1,'10.00'),(2,'20.00');
SELECT * FROM a
LEFT OUTER JOIN b ON a.id=b.id;
returns 1 and 3
SELECT * FROM b
LEFT OUTER JOIN a ON a.id=b.id;
returns 1 and 2
SELECT * FROM a
LEFT OUTER JOIN b ON a.id=b.id
UNION
SELECT * FROM b
LEFT OUTER JOIN a ON a.id=b.id;
returns 1, 3, 1 , 2
SELECT * FROM a
LEFT OUTER JOIN b ON a.id=b.id
UNION
SELECT * FROM b
RIGHT OUTER JOIN a ON a.id=b.id;
returns 1, 3, 1
这可能在MySQL中获得1,2,3还是我必须围绕它进行编程?
答案 0 :(得分:2)
您需要的是FULL OUTER JOIN
,遗憾的是,它并未在MySQL中实现。但是,您可以使用union实现相同的功能。有关如何执行此操作,请参阅this answer。