MYSQL(WHERE - IF - SELECT / IN语句)

时间:2016-08-22 18:58:48

标签: mysql sql if-statement select where

我正在尝试将代码设置为我的销售代表的控制面板。 通过我的控制面板,我可以根据客户购买的商品控制代表呼叫的客户。

即。如果我在销售代表01的控制面板中指定“汽车”,他只会打电话给在“汽车”类别中购买玩具的客户。我的“汽车”类别中的所有不同玩具都存储在名为“车辆”的单独文件中。

我的文件如下:

customer (File)
+--------+-----------+--------+
|  name  | phone     | toy    |
+--------+-----------+--------+
|  Gail  | 777-1234  | Truck  |
|  June  | 777-1235  | Doll   |
|  Mary  | 777-1236  | Racer  |
|  Bill  | 777-1237  | Ball   |
|  Jon   | 777-1238  | Jeep   |
+--------+-----------+--------+



control_panel (File)
+----------+--------+
| user     | desc   | 
+----------+--------+
| sales_01 | Cars   |
+----------+--------|


vehicles (File)
+---------+
+  item   | 
+---------+
|  Truck  |
|  Racer  |
|  Jeep   |
+---------+

在尝试测试此代码时,我的代码部分工作正常。

select 
    c.name , c.phone
FROM 
    customer c
WHERE
    c.toy IN (
            SELECT 
                v.item 
            FROM 
                vehicles v
            )

现在我正在尝试调整我的WHERE语句,这样只有当我在用户“sales_01”的控制面板屏幕中选择“汽车”时,购买汽车的客户才会在用户的“呼叫屏幕”上显示“sales_01”

这是我测试的一些代码的一个示例,但无法正常工作。

SELECT   
    c.name , c.phone
FROM
    customer c , control_panel p
WHERE
    (IF p.desc = "Cars" 
        THEN (c.toy 
            IN (SELECT 
                    v.item 
                FROM
                    vehicles v)
             )
     END)

感谢任何帮助。 THX。

1 个答案:

答案 0 :(得分:1)

首先,我建议您通过在category表中添加字段vehicles来重构您的架构。这样可以在control_panelcustomer之间建立适当的关系。在这种情况下,您可以SELECT c.name, c.phone FROM customer c LEFT OUTER JOIN vehicles v ON c.toy = v.items WHERE v.category = 'Cars'。我本来希望添加其他建议,但我觉得你想要一些现在可以工作的东西。另外,我现在没有太多时间闲暇。希望这会有所帮助。