Sql: объединение двух таблиц

#sql

#sql

Вопрос:

У меня есть две таблицы, которые называются mp_Blogs и mp_BlogCategories

mp_blog содержит столбцы и значения

  ItemID   ModuleID 
   3         11
   4         11
   5         13
  

mp_BlogCategories имеет столбец и значения

  CategoryID ModuleID 
   1         11
   2         11
   3         13
  

Мне нужен вывод, подобный этому

  ItemID   CategoryID
   3         1
   4         2
   5         3
  

Я использовал этот запрос

 SELECT a.[ItemID],b.[CategoryID] 
from [mp_Blogs] a 
    join [mp_BlogCategories] b 
        on a.ModuleID=b.ModuleID
  

Но это происходит по-другому

  ItemID   CategoryID
   3         1
   4         1
   3         2
   4         2
   5         3
  

Я также использовал функцию groupby, но вывод такой же, как и раньше, любая ошибка в запросе
, как получить мой исходный вывод

 SELECT a.[ItemID],b.[CategoryID] 
from [mp_Blogs] a 
    join [mp_BlogCategories] b 
        on a.ModuleID=b.ModuleID  
group by b.CategoryID,a.ItemID
  

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

1. Какое правило вы хотите использовать, чтобы иметь ItemId=3-> CatId=1 и ItemId= 4-> CatId= 2? Они оба имеют ModuleID=11, так как же вы можете решить ?

2. на самом деле itemid и catid — это идентификационный столбец, так есть ли какой-либо другой способ получить этот фактический результат

3. Да, у вас проблема с вашим контентом или определением таблиц. Элементы 3 и 4 связаны с категориями 1 и 2, если ModuleID является единственным ключом. Я подозреваю, что вам не хватает другого ключа.

Ответ №1:

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

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

1. я проверил таблицу так, что только для обоих ItemId= 3-> CatId = 1 и ItemId= 4-> CatId = 2 имеют одинаковый moduleid = 11, так что есть какой-либо другой способ получить мой исходный результат

Ответ №2:

Из выходных данных кажется, что что-то не так с данными, а не с запросом.

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

1. я проверил таблицу так, что только для обоих ItemId= 3-> CatId = 1 и ItemId= 4-> CatId = 2 имеют одинаковый moduleid = 11, так что есть какой-либо другой способ получить мой исходный результат

2. @Chandru: вы читали мой комментарий? Проблема в том, по какой причине вы выбираете CatId=1 для ItemId= 3 и CatId= 2 для ItemId= 4, когда они используют один и тот же ModuleID? Почему? Объясните, пожалуйста, потому что мы не понимаем…

3. @Marco: На нашем веб-сайте, если пользователь создает новую страницу, и это влияет на таблицу модулей, поэтому moduleid также создается на этой странице, они добавляют новую функцию под названием blog, ее таблица попаданий называется mp_blog вы можете увидеть структуру таблицы в моем сообщении, и, очевидно, у нас есть категория в нашем блоге, поэтому она попадает в таблицу mp_blogcategoryтеперь то, что мы собираемся сделать, означает, что я собираюсь получить itemid и categoryid для этого конкретного модуля и вставить в mp_blogitemcategory и там поле (itemid и categoryid)

Ответ №3:

После прочтения комментариев вам не хватает уникального ключа в обеих таблицах, поэтому я предлагаю вам добавить ключ в обе таблицы для достижения вашего результата.

Как это было бы — протестировано в mysql, работает нормально.

 -- id column primary key in mp_blog table.

create table mp_blog(id smallint(5),ItemID smallint(5),
ModuleID smallint(5),constraint mp_blog_id primary key(id));

insert into mp_Blog values(1,3,11),(2,4,11),(3,5,13);

-- id column foreign key references to mp_blog primary key id.

create table mp_BlogCategories(id smallint(5),CategoryID smallint(5),
ModuleID smallint(5),constraint fk_mp_blogc foreign key(id) references mp_blog(id));

insert into mp_BlogCategories values(1,1,11),(2,2,11),(3,3,13);

-- finally what you are trying to achieve..

select b.itemid,bc.categoryid
from mp_blog b INNER JOIN mp_BlogCategories bc
on b.id=bc.id;


 ItemID   CategoryID
   3         1
   4         2
   5         3
  

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

1. ItemId и Categoryid — это столбец идентификаторов в моей таблице, мне нужно вставить в таблицу с именем [mp_BlogItemCategories] поле ID (идентификатор), ItemId, CategoryID itemid (столбец) находится в другой таблице, а categoryid (столбец) находится в другой таблице, если я указал свой moduleid = 11 в моем идентификаторе таблицы mp_BlogItemCategories1 ItemId: 3,4 CategoryID: 1,2 как я должен это сделать