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”)
?这样行吗?