У меня есть код вроде этого.Почему find_in_set работает, но IN-код
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 ;
Здесь shipmentnumbers возвращается 100020,100021,100022
В идеале cartonid должны быть возвращены в 11,12,13
Но я получаю только 11, как cartonid.
Но когда я использую код ниже, я получаю правильный результат.
SELECT GROUP_CONCAT(a_cartonid) FROM t_carton WHERE FIND_IN_SET(a_shipmentid, shipmentnumbers) INTO cartonid;
Я хотел бы знать, что именно разница между IN и FIND_IN_SET и HWO ди я решить, что использовать.
как об этом 'SELECT FIND_IN_SET (" abc ", 'abc', 'abd', 'asr', 'asd')'? Это будет работать правильно? – Unbreakable