#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 как я должен это сделать