我遇到了一个我试图运行的查询的问题。该查询获取3个独立的select查询(每个查询都可以自己工作),但是我将它们全部拼接成单个结果。其中2个选项包含相同的字段,但第3个包含不同的字段,我想知道是否有任何我可以做的事情,而不是将查询拆分成2个单独的字段。在这一分钟,它给了我错误1241.具有不同字段名称的SQL多选查询?
它工作正常,当我结合第一和第三选择语句在一起,但显然中间查询有不同的字段名称和数据出来。只是不确定是否可以将sql数据提取到数组中,会更容易!
欢呼声,安德鲁
SELECT(
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email`, `cas_users`.`meta`, `cas_users`.`id`
FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '0'
AND `cas_users`.`expiry` > '1331165519'
) AS `c_p`, (
SELECT `name`, `email`, `phone`, `invited`
FROM `cas_not_connected`
WHERE `employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
) AS `nc`, (
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email`, `cas_users`.`meta`, `cas_users`.`id`
FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '1'
AND `cas_users`.`expiry` < '1331165519'
) AS `c_e`
编辑:
这是我得到了最终使用的代码,采取了全外的优势加入解决方法。也许矫枉过正,但确保只有1个数据库旅程来获取我需要的所有数据。只要他们保证不匹配:
SELECT * FROM (
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email` AS `email1`, `cas_users`.`meta`, `cas_users`.`id` AS `id1`, `cas_connected`.`stage`
FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '0'
AND `cas_users`.`expiry` > '1331173687'
UNION
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email` AS `email1`, `cas_users`.`meta`, `cas_users`.`id` AS `id1`, `cas_connected`.`stage` FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '1'
AND `cas_users`.`expiry` < '1331173687')
AS `conn`
LEFT OUTER JOIN `cas_not_connected`
ON `conn`.`id1` = `cas_not_connected`.`name`
UNION
SELECT * FROM (
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email` AS `email1`, `cas_users`.`meta`, `cas_users`.`id` AS `id1`, `cas_connected`.`stage`
FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '0'
AND `cas_users`.`expiry` > '1331173687'
UNION
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email` AS `email1`, `cas_users`.`meta`, `cas_users`.`id` AS `id1`, `cas_connected`.`stage` FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '1'
AND `cas_users`.`expiry` < '1331173687')
AS `conn`
RIGHT OUTER JOIN `cas_not_connected`
ON `conn`.`id1` = `cas_not_connected`.`name`
你也可以伪造那些空值的字段,但这很可能不会给你你想要的。解释我的看法:如果你有一个两列表,你想与三列表结合使用该列的常数值。像:SELECT id,name,'value'AS表的年龄 – Gimmy 2013-07-07 15:48:58