SQL — Выбрать записи без дублирования только в одном поле в SQL?

#sql #sql-server

#sql #sql-server

Вопрос:

Таблица 1


 | Customer_ID | Template_ID  
---------------------
| C1   |  T1   |    
| C1   |  T2   |    

---------------------
  

Таблица 2

 ---------------------
| Template_ID | Product_ID  
---------------------
| T1   |  P1   |    
| T1   |  P5   |    
| T1   |  P5   |    

| T2    |  P10   |    
| T2    |  P45   |    
  

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

 ------------------------------------------
| Customer_ID | Template_ID  | Product_ID  
------------------------------------------
| C1          |  T1          |  P1
| C1          |  T1          |  P5

| C1          |  T2          |  P10
| C1          |  T2          |  P45

.
.
  

Для шаблона я хочу получить только уникальный Product_ID, как указано выше. В настоящее время мой запрос возвращает P5 дважды, как,

 .
.
| C1          |  T1          |  P5
| C1          |  T1          |  P5
.
.
  

Как я могу справиться с этим на уровне запроса?

Комментарии:

1. Каков первичный ключ для вашего Table2 ?

Ответ №1:

использовать distinct

   select distinct t1.*,t2.productid
  from table1 t1 join table2 t2 on t1.Template_ID  =t2.Template_ID  
  

Комментарии:

1. @SyAu создать скрипту, а не текст dbfiddle.uk /…

Ответ №2:

Используйте DISTINCT для устранения дубликатов. Это относится не только к первому столбцу, но и ко всей строке.

Например:

 select distinct t1.customer_id, t1.template_id, t2.product_id
from t1
join t2 on t2.template_id = t1.template_id
  

Ответ №3:

Вам просто нужно, чтобы GROUP BY поле, которое вы хотите сделать уникальным, поэтому Product_ID:

 SELECT Customer_ID,  Template_ID, Product_ID
FROM table1
JOIN table2 using ( Template_ID )
GROUP BY Product_ID;
  

Ответ №4:

Пожалуйста, попробуйте это.

 SELECT 
    DISTINCT A.Customer_ID ,A.Template_ID  ,B.Product_ID   
FROM 
    table1 AS A
INNER JOIN table2 AS B
ON A.Template_ID   = B.Template_ID