Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 - Fatal编程技术网

将两列合并为新列,并在同一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_

我正在尝试这个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_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子句,否则结果将包含比预期多得多的记录。。。。(否则,这是一个可行的解决方案;查询优化器非常擅长“理解”此类查询)