【问题标题】:Using Select left in where clause在 where 子句中使用 Select left
【发布时间】:2016-12-19 16:36:45
【问题描述】:

我有 2 张桌子:今天的订单和记录

Table Name : Orders from today
+-----------+-----------+
|Order ID   |   Online  |
+-----------+-----------+
|   550     |      Yes  | 
|   551     |       No  |
|   552     |      Yes  | 
|   553     |      Yes  |
+-----------+-----------+

Table Name : Records
+----------------+
|       A        |
+----------------+
|   548xxxxx     |
|   549xxxxx     |
|   550xxxxx     |
|   551xxxxx     | 
|   552xxxxx     |
|   553xxxxx     |
|   554xxxxx     |
+----------------+
XXXXX represents random number

我正在尝试根据 Orders from today 表中的 ORDER ID 的前 3 位从 Records 表中获取完整记录。 我想要的结果是:

Table Name : Records
+----------------+
|       A        |
+----------------+
|   550xxxxx     |
|   551xxxxx     | 
|   552xxxxx     |
|   553xxxxx     |
+----------------+

我尝试过使用: SELECT * FROM orders WHERE orderid IN ( SELECT (LEFT(orderid, 3) FROM sample)); 但我只收到语法错误。我知道我可以使用 % 但我不知道如何适应代码。

请帮忙,非常感谢!

编辑! 假设从今天开始的 Orders 中的 Order Id 不都是 55%

谢谢!

【问题讨论】:

标签: mysql sql


【解决方案1】:

可能的数据类型转换问题

试试:

select *
from orders o1
left join records r2
  on cast(o1.orderid as varchar(3)) = left(r2.orderid,3)

【讨论】:

    【解决方案2】:
    SELECT * 
    FROM orders 
    WHERE orderid IN ( SELECT (LEFT(orderid, 3) 
                       FROM sample 
                       WHERE orderid LIKE '55%'));
    

    【讨论】:

    • 但是555xxxxx 呢?如果 OP 不想要这些怎么办?
    【解决方案3】:

    我想我得到了你要找的东西。如果您需要帮助,请告诉我。 SQLFiddle 链接。 代码:

    CREATE TABLE IF NOT EXISTS ordersFromToday (
        order_ID INT,
        online VARCHAR(4),
        PRIMARY KEY (order_ID)
    );
    INSERT INTO ordersFromToday (order_ID,online) VALUES(550,'yes'),(551,'no'),(552,'yes'),(553,'yes');
    
    CREATE TABLE IF NOT EXISTS records (
        record_ID INT,
        PRIMARY KEY (record_ID)
    );
    INSERT INTO records (record_ID) VALUES (5481213),(5494833),(5505983),(5519080),(5524984),(5531315),(5549858);
    
         CREATE PROCEDURE GetAllProducts()
           BEGIN
            # Declare needed variables
            DECLARE finished BOOLEAN DEFAULT FALSE;
            DECLARE orderIDHold INT;
    
            # cursor for each order_ID
            DECLARE orderNumber CURSOR FOR
            ( SELECT order_ID FROM ordersFromToday);
    
            # our continue handler for quitting the loop
            DECLARE CONTINUE HANDLER 
            FOR NOT FOUND SET finished = TRUE;
    
            # create a table to store these values
            DROP TABLE IF EXISTS tempReportTbl;
            CREATE TABLE IF NOT EXISTS tempReportTbl ( 
                order_ID INT,
                PRIMARY KEY (order_ID)
                ); 
    
             # open cursors
             OPEN orderNumber;
    
             # start loop
             mainFunc: loop
    
               FETCH orderNumber INTO orderIDHold;
    
               IF finished = TRUE THEN
                 LEAVE MAINFUNC;
               END IF;
    
               SET @searchOrderID :=orderIDHold;
    
               INSERT INTO tempReportTbl (order_ID)
               SELECT * FROM records r1 where r1.record_ID LIKE concat(@searchOrderID,'%');
    
            # end loop
            END LOOP mainFunc;
    
            # close cursors
            CLOSE orderNumber;
    
           END //
    

    输出:

    order_ID

    • 5505983
    • 5519080
    • 5524984
    • 5531315

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多