Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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_Sql_Select - Fatal编程技术网

Mysql 为什么在集合中查找但在子句中查找

Mysql 为什么在集合中查找但在子句中查找,mysql,sql,select,Mysql,Sql,Select,我有这样的代码 DELIMITER $$ CREATE PROCEDURE `sp_deleteOrderData`(orderid BIGINT(11)) BEGIN DECLARE shipmentnumbers VARCHAR(1000); DECLARE cartonid VARCHAR(1000); SELECT GROUP_CONCAT(a_shipmentid) FROM t_shipment WHERE a_ord

我有这样的代码

DELIMITER $$
    CREATE PROCEDURE `sp_deleteOrderData`(orderid BIGINT(11))
    BEGIN
        DECLARE shipmentnumbers VARCHAR(1000);
        DECLARE cartonid VARCHAR(1000);

        SELECT GROUP_CONCAT(a_shipmentid) FROM t_shipment WHERE a_orderid = orderid INTO shipmentnumbers;

        SELECT GROUP_CONCAT(a_cartonid) FROM t_carton WHERE a_shipmentid IN (shipmentnumbers) INTO cartonid;

    SELECT shipmentnumbers;
    /*SELECT  cartonid;  */
    END$$

    DELIMITER ;
此处ShipmentNumber返回
1000020100021100022
理想情况下,cartonid应返回为
11,12,13

但我只得到了11分

但当我使用下面的代码时,我得到了正确的结果

  SELECT GROUP_CONCAT(a_cartonid) FROM t_carton WHERE FIND_IN_SET( a_shipmentid, shipmentnumbers ) INTO cartonid;

我想知道IN和FIND_IN_SET与hwo di之间的区别,我决定使用什么。

FIND_IN_SET
搜索一组字符串中由逗号分隔的字符串

但是您不需要使用
GROUP\u CONCAT
来连接要在
in
子句中使用的行,请尝试以下操作

SELECT  GROUP_CONCAT(a_cartonid) 
FROM    t_carton
WHERE   a_shipmentid IN
         (
            SELECT a_shipmentid
            FROM t_shipment 
            WHERE a_orderid = orderid
         )
或者使用
JOIN

SELECT  GROUP_CONCAT(DISTINCT a.a_cartonid) 
FROM    t_carton a
        INNER JOIN
        (
            SELECT a_shipmentid
            FROM t_shipment 
            WHERE a_orderid = orderid
        ) b ON a.a_shipmentid = b.a_shipmentid

中接受要搜索的列表或参数,
在_集合中查找
接受包含逗号分隔列表的字符串参数:

SELECT  1 IN (1, 2, 3, 4)

SELECT  FIND_IN_SET(1, '1,2,3,4')
如果尝试将中的
应用于逗号分隔的字符串,它会将其视为单个参数,并将其作为一个整体进行匹配:

SELECT  1 IN ('1,2,3,4')

当然,字符串
'1'
不等于字符串
'1,2,3,4'
,因此上面的查询返回false。

这个
如何选择在集合中查找(“abc”,“abc”,“abd”,“asr”,“asd”)
?这样行吗?