将两列合并为新列,并在同一mysql查询中使用该列
我正在尝试这个Mysql查询-将两列合并为新列,并在同一mysql查询中使用该列,mysql,Mysql,我正在尝试这个Mysql查询- SELECT pan_1, dp_id, client_id, CONCAT(dp_id,client_id) AS ref, name_s, bonds FROM `holding_details` WHERE `date` = '2015-10-23' AND comp_code = '33' AND ref NOT IN (SELECT CONCAT(dp_id,client_id) AS ref FROM `promoters` WHERE comp_
SELECT pan_1, dp_id, client_id, CONCAT(dp_id,client_id) AS ref, name_s, bonds
FROM `holding_details`
WHERE `date` = '2015-10-23'
AND comp_code = '33'
AND ref NOT IN
(SELECT CONCAT(dp_id,client_id) AS ref FROM `promoters` WHERE comp_code = '33')
GROUP BY pan_1
ORDER BY bonds DESC
通过阅读上述查询,您只需了解我想要的结果。在这两个表中,我有两个同名的saparate列dp_id和client_id。我想从“holding_details”表中得到一些结果,除了在“Promotors”表中的dp_id和client_id列的条件下出现的结果之外,我合并了它们,因为这使它们成为唯一的记录。我尝试了上面的MySql查询,但它显示了“unknown column ref”错误。请告诉我不可能在同一个查询中使用combine列,以及如何实现该结果。谢谢您可以使用
不存在
:
SELECT pan_1, dp_id, client_id, CONCAT(dp_id,client_id) AS ref, name_s, bonds
FROM `holding_details` d
WHERE `date` = '2015-10-23'
AND comp_code = '33'
AND NOT EXISTS
(SELECT 'x' FROM `promoters` p
WHERE p.comp_code = '33'
AND p.dp_id = d.dp_id
AND p.client_id = d.client_id)
GROUP BY pan_1
ORDER BY bonds DESC
这也应该起作用:只指定两列(不包含CONCAT!),并从选择返回两列:
SELECT pan_1, dp_id, client_id, CONCAT(dp_id,client_id) AS ref, name_s, bonds
FROM `holding_details`
WHERE `date` = '2015-10-23'
AND comp_code = '33'
AND (dp_id, client_id) NOT IN
(SELECT dp_id, client_id) AS ref FROM `promoters` WHERE comp_code = '33')
GROUP BY pan_1
ORDER BY bonds DESC
如果您使用的不是别名ref
,而是表达式本身,那么您自己的尝试也可能奏效。不过,我更喜欢上面的那个。在索引的使用方面,Concatting使其不那么清晰,效率也更低。如果您有正确的索引,上面的查询会非常有效。无论如何,这是:
SELECT pan_1, dp_id, client_id, CONCAT(dp_id,client_id) AS ref, name_s, bonds
FROM `holding_details`
WHERE `date` = '2015-10-23'
AND comp_code = '33'
AND CONCAT(dp_id,client_id) NOT IN
(SELECT CONCAT(dp_id,client_id) AS ref FROM `promoters` WHERE comp_code = '33')
GROUP BY pan_1
ORDER BY bonds DESC
不完全是对你的问题的回答,但可能是对你的问题的回答……
更好地使用。它比您的CONCAT()方法更有可能使用索引
SELECT
pan_1, dp_id, client_id, name_s, bonds
FROM
`holding_details` as hd
WHERE
hd.`date` = '2015-10-23'
AND
hd.comp_code = '33'
AND
NOT EXISTS (
SELECT
*
FROM
promoters as p
WHERE
p.comp_code = '33'
AND hd.dp_id=p.dp_id
AND hd.client_id=p.client_id
)
GROUP BY
pan_1
ORDER BY
bonds DESC
试试这个查询
SELECT pan_1, hd.`dp_id`, hd.`client_id`, CONCAT(hd.`dp_id`,hd.`client_id`) AS ref, name_s, bonds
FROM `holding_details` as hd
LEFT JOIN `promoters` as p on p.`dp_id` = hd.`dp_id` AND p.`client_id` = hd.`client_id`
WHERE hd.`date` = '2015-10-23'
AND hd.`comp_code` = '33'
AND p.`dp_id` <> hd.`dp_id`
AND p.`client_id` <> hd.`client_id`
GROUP BY pan_1
ORDER BY bonds DESC
选择pan_1,hd.`dp_id`,hd.`client_id`,CONCAT(hd.`dp_id`,hd.`client_id`)作为ref,name_s,bonds
从“保留详细信息”到hd
在p.`dp_id`=hd.`dp_id`和p.`client_id`=hd.`client_id`上以p的形式左键加入'promotors'`
其中hd.`date`=“2015-10-23”
和hd.`comp_code`='33'
和p.`dp_id`hd.`dp_id`
和p.`client_id`hd.`client_id``
Panu_1分组
债券订购说明
我所理解的是。要从两个不同的表中选择数据吗?已尝试左加入?不,我不想加入表。我只想从holding_details表中获取数据,但只需要Promotors表中不存在的dp_id和client_id。这需要isnull(p.dp_id)或类似的WHERE子句,否则结果将包含比预期多得多的记录。。。。(否则,这是一个可行的解决方案;查询优化器非常擅长“理解”此类查询)