0

次のようなクエリがあります。

SELECT cu.CustomerCountryID,
       pr.ProviderCountryID,
       po.ProductCountryID
FROM   tblCustomer cu
       INNER JOIN tblProvider pr
         ON cu.ProvID = pr.ProvID
       INNER JOIN tblProduct po
         ON pr.ProdID = po.ProdID 

次に、国名を含む 4 番目のテーブルがあります。CountryID を CountryName に置き換えたい。

サブクエリを発生させずにそれを行う方法を今は考えられません

誰でもこれを行うためのより速い方法についてアドバイスできますか?

ありがとう

4

5 に答える 5

1

これは、country テーブルに複数回参加することで実現できます。

SELECT cust_country.CountryName,
   prov_country.CountryName,
   prod_country.CountryName
FROM   tblCustomer cu
   INNER JOIN tblProvider pr
     ON cu.ProvID = pr.ProvID
   INNER JOIN tblProduct po
     ON pr.ProdID = po.ProdID 
   INNER JOIN tblCountry cust_country
     ON cu.CustomerCountryID = cust_country.CountryID
   INNER JOIN tblCountry prov_country
     ON pr.CustomerCountryID = prov_country.CountryID
   INNER JOIN tblCountry prod_country
     ON co.CustomerCountryID = prod_country.CountryID
于 2013-01-30T12:52:38.887 に答える
0

値を取得するには、何らかの結合が必要になります。他に方法はありません。ただし、すでに行っている2つの結合と同じ種類の結合である必要はありません。インラインビューである可能性があります。

SELECT cu.CustomerCountryID,
       pr.ProviderCountryID,
       po.CountryName
FROM   tblCustomer cu
,      tblProvider pr
,     (SELECT po.ProdID
       ,      co.CountryName
       FROM   tblProduct po
       ,      tblCountry co
       WHERE  po.ProductCountryID = co.productCountryID
) po
WHERE  cu.ProvID = pr.ProvID
AND    pr.ProdID = po.ProdID;

または(DBプロバイダーによっては)、選択リストで副選択を行うことができます。

SELECT cu.CustomerCountryID,
       pr.ProviderCountryID,
       (SELECT co.CountryName FROM tblCountry co WHERE po.ProductCountryID = co.productCountryID) AS CountryName
FROM   tblCustomer cu
,      tblProvider pr
,      tblProduct po
WHERE  cu.ProvID = pr.ProvID
AND    pr.ProdID = po.ProdID;

表の1つだけの例を示しましたが、3つすべてに同じことが当てはまります。

于 2013-01-30T12:55:41.620 に答える
0

国テーブルに複数回参加できます。

SELECT cuco.CountryName,
       prco.CountryName,
       poco.CountryName
FROM   tblCustomer cu
       INNER JOIN tblProvider pr
         ON cu.ProvID = pr.ProvID
       INNER JOIN tblProduct po
         ON pr.ProdID = po.ProdID 
       INNER JOIN tblCountry cuco
         ON cu.CustomerCountryID = co.CountryID
       INNER JOIN tblCountry prco
         ON pr.ProviderCountryID = co.CountryID
       INNER JOIN tblCountry poco
         ON po.ProductCountryID = co.CountryID
于 2013-01-30T12:51:34.617 に答える
0
SELECT
    cco.CountryName as CustomerCountryName, pco.CountryName as ProviderCountryName, ppco.CountryName as ProductCountryName
FROM
    tblCustomer cu
INNER JOIN
    tblProvider pr ON cu.ProvID = pr.ProvID
INNER JOIN
    tblProduct po ON pr.ProdID = po.ProdID
INNER JOIN
    tblCountry cco ON cu.CustomerCountryID = cco.CountryID
INNER JOIN
    tblCountry pco ON pr.ProviderCountryID = pco.CountryID
INNER JOIN
    tblCountry ppco ON po.ProductCountryID = ppco.CountryID

tblCountryこれは、列で呼び出されるテーブルがあることを前提としていCountryIDます。

于 2013-01-30T12:50:36.547 に答える
0

IDの名前ごとに結合を配置する必要があります...また、これを試すことができます。

SELECT 
  (Select CountryName from tblCountry where CountryID =cu.CustomerCountryID),
  (Select CountryName from tblCountry where CountryID =pr.ProviderCountryID),
  (Select CountryName from tblCountry where CountryID =po.ProductCountryID)                
FROM tblCustomer cu    
  INNER JOIN tblProvider pr ON cu.ProvID = pr.ProvID
  INNER JOIN tblProduct po ON pr.ProdID = po.ProdID
于 2013-01-30T13:04:39.843 に答える