MySQL:UNION+JOIN
我正试图弄明白如何在相同的连接中使用UNION,而不是陷入#2014-命令不同步 我已经创建了四个简单的表,并为它们编写了简化的代码。主要的想法是要得到每一把剑,枪和帽子,其中有'最好的'的名字+如果这些所有者很酷MySQL:UNION+JOIN,mysql,join,union,Mysql,Join,Union,我正试图弄明白如何在相同的连接中使用UNION,而不是陷入#2014-命令不同步 我已经创建了四个简单的表,并为它们编写了简化的代码。主要的想法是要得到每一把剑,枪和帽子,其中有'最好的'的名字+如果这些所有者很酷 SELECT pirate_id, sword, null AS gun, null AS hat, legs = 1 AS is_cool FROM swords as t1 LEFT JOIN (SELECT legs, pirate_id as pid FROM body_pa
SELECT pirate_id, sword, null AS gun, null AS hat, legs = 1 AS is_cool FROM swords as t1
LEFT JOIN
(SELECT legs, pirate_id as pid FROM body_parts) AS t2
ON t1.pirate_id = t2.pid
WHERE sword LIKE '%best%'
UNION
SELECT pirate_id, null AS sword, gun, null AS hat, legs = 1 AS is_cool FROM guns as t3
LEFT JOIN
(SELECT legs, pirate_id as pid FROM body_parts) AS t4
ON t3.pirate_id = t4.pid
WHERE gun LIKE '%best%'
UNION
SELECT pirate_id, null AS sword, null AS gun, hat, legs = 1 AS is_cool FROM hats as t5
LEFT JOIN
(SELECT legs, pirate_id as pid FROM body_parts) AS t6
ON t5.pirate_id = t6.pid
WHERE hat LIKE '%best%'
ORDER BY is_cool DESC, pirate_id ASC
目前,我必须重复加入每次我必须联盟。我希望有更好的方法
表格创建:
CREATE TABLE IF NOT EXISTS `body_parts` (
`pirate_id` int(11) NOT NULL,
`legs` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `body_parts` (`pirate_id`, `legs`) VALUES
(1, 0),
(2, 1),
(3, 2);
CREATE TABLE IF NOT EXISTS `guns` (
`pirate_id` int(11) NOT NULL,
`gun` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `guns` (`pirate_id`, `gun`) VALUES
(1, 'best 1');
CREATE TABLE IF NOT EXISTS `hats` (
`pirate_id` int(11) NOT NULL,
`hat` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `hats` (`pirate_id`, `hat`) VALUES
(2, 'best 2');
CREATE TABLE IF NOT EXISTS `swords` (
`pirate_id` int(11) NOT NULL,
`sword` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `swords` (`pirate_id`, `sword`) VALUES
(3, 'best 3');
您可以使用单个左连接,通过子查询更改
select t1.pirate_id, t1.sword, t1.gun, t1.hat, t2.legs=1 is_cool
from (
SELECT pirate_id, sword, null AS gun, null AS hat
FROM swords
WHERE sword LIKE '%best%'
UNION
SELECT pirate_id, null, gun, null
FROM guns
WHERE gun LIKE '%best%'
UNION
SELECT pirate_id, null, null, hat
FROM hats
WHERE hat LIKE '%best%'
) t1
LEFT JOIN (
SELECT legs, pirate_id
FROM body_parts
) t2 ON t2.pirate_id = t1.pirate_id
ORDER BY is_cool DESC, pirate_id ASC
#1054-字段列表中的未知列“legs”#1222-使用的SELECT语句有不同数量的列SANSWER更新。。由于每个select UNION中有4列,因此缺少一个字符。无论如何,谢谢你的回答!为什么不写“选择海盗身份证、剑、枪、帽子、腿=1,因为它很酷”,而不写表名?我缺少的字符是什么“为什么不写‘选择海盗身份证、剑、枪、帽子、腿=1,因为它很酷’,而不写桌名?”这句话是什么意思。。我不清楚。。更好地解释