获取名称未在我的表中定义的MySQL列

时间:2012-05-07 01:12:01

标签: mysql format row

我正在尝试编写一个在这一点上假设的查询,看起来像这样:

SELECT customers.*, 
       customers_cars.car
        (SELECT main_vehicle 
         FROM customers 
         WHERE customer='Joe') 
FROM customers 
WHERE type='CoolCustomer';

我的表实际上有像car1,car2,car3这样的值,我希望在运行时“格式化”这些值。不幸的是,我不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

你没有向我们展示你桌子的架构;这比帮助你更难。

如果您想要获得car1列或car2列或......那么至少会有两个问题:

  1. 您的桌子设计不正确。
  2. 您无法在查询中构建列(或表)的名称。
  3. 您应该将有关每个客户汽车的信息放在与客户相关的信息的单独表格中。因此,客户姓名为“Joe”的信息属于一个表格;他驾驶兰博基尼的事实应该记录在一张单独的表格中。每个客户的汽车表中可能有多个记录。

    你还需要加入这两张桌子;你的语法不正确的查询不会尝试这样做。


    您有两个包含列的表:

    • 客户:客户,类型,...

    • Customers_Cars :main_vehicle,car1,car2,car3

    您可能在Customers_Cars中有某种“客户”列,但尚未显示。实际上,您应该在每个表中都有一个“客户ID”列。此外,Customers_Cars表应该只是:

    • Customers_Cars :CustomerID,CarNum,CarInfo,MainVehicle

    在此,我假设MainVehicle是一个布尔标志,并且每个客户有一个标记为真的条目。

    然后您的SELECT语句变为:

    SELECT U.*, 
           C.CarInfo
      FROM Customers      AS U
      JOIN Customers_Cars AS C ON C.CustomerID = U.CustomerID
     WHERE C.MainVehicle = TRUE
       AND U.Customer = 'Joe'
       AND U.Type     = 'CoolCustomer';
    

答案 1 :(得分:0)

我认为你指的是列别名。有关别名的使用,请参阅此参考:Using column alias in WHERE clause of MySQL query produces an error

但是别名的底线是使用AS关键字。使用子查询时可能需要别名,就像在括号中使用查询一样。

在您的示例中,请尝试以下操作:

SELECT customers.*, car1 AS customers_cars.car
   (SELECT car2 AS main_vehicle 
     FROM customers 
     WHERE customer='Joe') 
FROM customers 
WHERE type='CoolCustomer';