juzar Para Ответов: 1

Присоединяйтесь и объединяйтесь, я что один к тамоте против двух ID 5


У меня есть два стола, апельсины и яблоки. Id 5 в апельсинах имеет два элемента, но ID 5 в яблоках имеет один элемент. Когда я запускаю запрос ниже, два одинаковых элемента отображаются в таблице яблок с двумя разными элементами таблицы апельсинов. Я хочу, чтобы результат был ниже.
oranges

ID  Variety     Price
4   Valencia    4
5   Navel       5
5   banana      5
1   Fuji        5
2   Gala        6

apples

ID  Variety    Price
1   Fuji         5  
2   Gala         6
3   carrot       6
5   tamota       5

Запрос
select * from apples as a
    left join oranges as o on a.ID = o.ID
union
select * from apples as a
    right join oranges as o on a.ID = o.ID

Результат
ID  Variety Price  ID Variety      Price
5   tamota    5     5   Navel       5
5   tamota    5     5   banana      5
1   Fuji      5     1   Fuji        5
2   Gala      6     2   Gala        6
3   carrot    6     null   null    null 
null null   null    4   Valencia    4


Требуемый результат
ID   Count   Variety Price  ID   Count   Variety      Price
5      1    tamota    5     5      1       Navel       5
null   0     null    null   5      2      banana       5      
1      1    Fuji      5     1      1      Fuji         5
2      1    Gala      6     2      1      Gala         6
3      1   carrot    6     null    0       null      null 
null   0   null     null    4      1     Valencia      4


Что я уже пробовал:

Это даст количество дублирует идентификационный номер, пусть это id 5 повторяется 2 раза, чтобы его показать удостоверение 5 граф 1 и 5 графа 2 код,

с уважением

джузар пара

MadMyche

Вы должны использовать первичный ключ, так как ваш столбец ID, очевидно, не имеет уникального ограничения на него

Herman<T>.Instance

именно так

1 Ответов

Рейтинг:
1

MadMyche

Вся предпосылка этого вопроса только кажется... недостатки.
Вам нужно будет предоставить еще немного контекста о том, каковы фактические потребности (письменный бизнес), поскольку логика "требуемого" результата кажется неправильной.

Тем не менее, это выглядит так, как будто это должно быть повседневное отношение таблицы родитель-ребенок; с таблицами для фруктов (родитель) и сортов (дети).

DECLARE @Fruits TABLE (
  FruitID    INT PRIMARY KEY  NOT NULL,
  FruitName  NVARCHAR(16)     NULL
)

DECLARE @Varieties TABLE (
  VarietyID     INT PRIMARY KEY	NOT NULL,
  FruitID       INT             NULL,
  VarietyName   NVARCHAR(16)  	NULL,	
  VarietyPrice  INT             NULL,
  WorthlessID   INT             NULL
)

INSERT @Fruits (FruitID, FruitName) 
VALUES  (1, 'Apple')
,       (2, 'Orange')

INSERT @Varieties(VarietyID, FruitID, VarietyName, VarietyPrice, WorthlessID)
VALUES  (1, 1, 'Fuji', 5, 1)
,       (2, 1, 'Gala', 6, 2)
,       (3, 1, 'Carrot', 6, 3)
,       (4, 1, 'Tamota', 5, 5)
,       (5, 2, 'Valencia', 4, 4)
,       (6, 2, 'Navel', 5, 5)
,       (7, 2, 'Banana', 5, 5)
,       (8, 2, 'Fuji', 5, 1)
,       (9, 2, 'Gala', 6, 2)

SELECT  v.VarietyID, f.FruitName, v.VarietyName, v.VarietyPrice
FROM    @Fruits     f
JOIN    @Varieties  v ON f.FruitID = v.FruitID

Который возвращается
VarietyID   FruitName        VarietyName      VarietyPrice WorthlessID
----------- ---------------- ---------------- ------------ -----------
1           Apple            Fuji             5            1
2           Apple            Gala             6            2
3           Apple            Carrot           6            3
4           Apple            Tamota           5            5
5           Orange           Valencia         4            4
6           Orange           Navel            5            5
7           Orange           Banana           5            5
8           Orange           Fuji             5            1
9           Orange           Gala             6            2