-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

テーブルのスキーマを示していません。それはあなたを助けることよりも難しくなります。

car1列または列または ...を取得しようとしている場合car2、少なくとも 2 つの問題があります。

  1. テーブルが正しく設計されていません。
  2. クエリの一部として列 (またはテーブル) の名前を作成することはできません。

顧客の各車に関する情報は、顧客に関する情報とは別のテーブルに入れる必要があります。したがって、顧客の名前が「Joe」であるという情報は、1 つのテーブルに属します。彼がランボルギーニを運転しているという事実は、別の表に記録する必要があります。車のテーブルには、顧客ごとに複数のレコードが存在する場合があります。

2 つのテーブルを結合する必要もあります。構文的に正しくないクエリはそれを試みません。


列を持つ 2 つのテーブルがあります。

  • 顧客: 顧客、タイプ、...

  • Customers_Cars : main_vehicle、car1、car2、car3

おそらく表示されていませんが、 にある種の「顧客」列があるでしょうCustomers_Cars。実際、おそらく各テーブルに「顧客 ID」列が必要です。さらに、Customers_Carsテーブルは次のようにする必要があります。

  • Customers_Cars : CustomerID、CarNum、CarInfo、MainVehicle

MainVehicleここで、はブール値フラグであり、顧客ごとに true とタグ付けされたエントリが 1 つあると想定しています。

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 に答える