我正在尝试编写一个在这一点上假设的查询,看起来像这样:
SELECT customers.*,
customers_cars.car
(SELECT main_vehicle
FROM customers
WHERE customer='Joe')
FROM customers
WHERE type='CoolCustomer';
我的表实际上有像car1,car2,car3这样的值,我希望在运行时“格式化”这些值。不幸的是,我不知道该怎么做。
答案 0 :(得分:0)
你没有向我们展示你桌子的架构;这比帮助你更难。
如果您想要获得car1
列或car2
列或......那么至少会有两个问题:
您应该将有关每个客户汽车的信息放在与客户相关的信息的单独表格中。因此,客户姓名为“Joe”的信息属于一个表格;他驾驶兰博基尼的事实应该记录在一张单独的表格中。每个客户的汽车表中可能有多个记录。
你还需要加入这两张桌子;你的语法不正确的查询不会尝试这样做。
您有两个包含列的表:
客户:客户,类型,...
Customers_Cars :main_vehicle,car1,car2,car3
您可能在Customers_Cars
中有某种“客户”列,但尚未显示。实际上,您应该在每个表中都有一个“客户ID”列。此外,Customers_Cars
表应该只是:
在此,我假设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';