-2

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

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

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

4

2 回答 2

0

您还没有向我们展示您的表格的架构;这比帮助你更难。

如果您正在寻求获取car1column 或car2column or ... 那么至少有两个问题:

  1. 你的桌子设计不正确。
  2. 您不能将列(或表)的名称构建为查询的一部分。

您应该将有关客户每辆汽车的信息与有关客户的信息放在单独的表中。因此,客户姓名为“Joe”的信息属于一个表;他驾驶兰博基尼的事实应该记录在单独的表格中。每个客户的汽车表中可能有多个记录。

您还需要加入这两个表;您的语法不正确的查询不会尝试这样做。


您有两个带有列的表:

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

  • 客户_汽车 : main_vehicle, car1, car2, car3

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

  • Customers_Cars : CustomerID、CarNum、CarInfo、MainVehicle

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

然后您的 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';
于 2012-05-07T02:26:08.850 回答
0

我认为您指的是给列别名。请参阅有关使用别名的参考:在 MySQL 查询的 WHERE 子句中使用列别名会产生错误

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

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

SELECT customers.*, car1 AS customers_cars.car
   (SELECT car2 AS main_vehicle 
     FROM customers 
     WHERE customer='Joe') 
FROM customers 
WHERE type='CoolCustomer';
于 2012-05-07T02:33:57.027 回答