3 Таблица SQL Join - PullRequest
       13

3 Таблица SQL Join

1 голос
/ 28 июля 2011

У меня проблемы с захватом соединений между более чем двумя таблицами и их синтаксисом.

Мне нужно взять имя родителя, имя поставщика, зону, упорядоченную по зонам.Не уверен, что данных достаточно.

ТАБЛИЦЫ

vendor vendor_staff type_zone

Это моя самая странная попытка, и я считаю, что я очень далеко.Я знаю, что мне не хватает возможных заключенных в скобки предложений.

QUERY

SELECT 
vendor.name AS Vendor, vendor_staff.vendorstaff AS Staff,type_zone.type AS Region
FROM dbo.vendor inner join dbo.type_zone
ON fkType_zoneID = pkType_ZoneID 
WHERE dbo.vendor.active = 1 and vendor_staff.fkVendorID = vendor.PkVendorID
ORDER BY type_zone.type, name

Три таблицы можно объединить, используя:

vendor.pkvendorID = vendor_staff.fkVendorID
type_zone.pkType_ZoneID = vendor.fkType_zoneID

Результат должен возвращаться в каждом ряду. Персонал -> Продавец -> Зона

Ответы [ 4 ]

1 голос
/ 28 июля 2011
SELECT 
vendor.name AS Vendor, 
vendor_staff.vendorstaff AS Staff,
type_zone.type AS Region
FROM 
dbo.vendor 
inner join dbo.type_zone ON fkType_zoneID = pkType_ZoneID
inner join dbo.vendor_staff on fkVendorID = PkVendorID
WHERE dbo.vendor.active = 1
ORDER BY 
type_zone.type, 
name
1 голос
/ 28 июля 2011

Соединения являются ВНУТРЕННИМИ, если вы не укажете LEFT, RIGHT, FULL, при необходимости добавив OUTER.

SELECT v.name        AS Vendor,
       s.vendorstaff AS Staff,
       t.type        AS Region
  FROM dbo.vendor       AS v
  JOIN dbo.vendor_staff AS s ON v.pkvendorID    = s.fkVendorID
  JOIN dbo.type_zone    AS t ON v.fkType_zoneID = t.pkType_ZoneID 
 WHERE v.active = 1
 ORDER BY t.type, name
0 голосов
/ 28 июля 2011
SELECT 
    Vendor = v.name,
    Staff = vs.vendorstaff,
    Region = t.[type]
FROM
    dbo.vendor AS v
INNER JOIN
    dbo.vendor_staff AS vs
    ON v.pkvendorID = fkVendorID
INNER JOIN
    dbo.type_zone AS t
    ON v.fkType_zoneID = t.pkType_ZoneID
WHERE
    v.active = 1
ORDER BY
    t.type,
    v.name;
0 голосов
/ 28 июля 2011

Вы использовали гибрид ANSI и традиционных объединений.

Вы можете сделать это полностью с помощью JOIN, например:

SELECT
   v.name as Vendor,
   s.vendorstaff as Staff,
   t.type_zone as Region
FROM
   vendor v 

   INNER JOIN type_zone t 
   ON v.fkType_zoneID = t.pkTpe_ZoneID

   INNER JOIN vendorstaff s 
   ON v.pkVendorID = s.fkVendorID
WHERE
   v.active = 1
ORDER BY
   t.type_zone,
   v.name

Или вы можете сделать это полностью без объединений (традиционно) вот так

SELECT
   v.name as Vendor,
   s.vendorstaff as Staff,
   t.type_zone as Region
FROM
   vendor v,
   type_zone t,
   vendorstaff s 
WHERE
       v.fkType_zoneID = t.pkTpe_ZoneID
   AND v.pkVendorID = s.fkVendorID
   AND v.active = 1
ORDER BY
   t.type_zone,
   v.name
...