如何根据另一个表的ID查看表?

时间:2018-12-25 12:54:01

标签: sql sql-server

根据另一个表ID查看表。 示例:查看来自国家/地区表的id = 5(来自用户表)的国家/地区。

我认为该任务需要子查询。

Select * from country where (select id from users where id = 5)

它不能正常工作。

修改

用户表

CREATE TABLE `user` (
  `id` int(6)  NOT NULL,
  `name` varchar(30)  NOT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO `user` (`id`, `name`) VALUES
  ('1', 'jackie'),
  ('2', 'maria'),
  ('3', 'sandra')

国家/地区表

CREATE TABLE `country` (
  `name` varchar(30)  NOT NULL,
  `capital` varchar(30) NOT NULL,
) ;
INSERT INTO `country` (`name`, `capital`) VALUES
  ('Italy', 'Rome'),
  ('Portugal', 'Lisbon'),
  ('China', 'Beijing'),
  ('Norway', 'Oslo');

目的:用户可以标记访问过的国家/地区,因此该程序应能够显示用户访问过的国家/地区。

因此,我们需要一个查询来显示ID = 5的用户访问过的每个国家/地区的信息。

示例用户= 5访问了意大利和挪威。

更新

添加用户访问过的国家/地区:

CREATE TABLE `country_visited`(
    `userId` INT(6) not null,
    `country` varchar(30) not null
);
INSERT INTO `country_visited` (`userid`,`country`) VALUES
  ('1', 'Spain'),
  ('2', 'Norway'),
  ('3', 'Italy'),
  ('4', 'Spain'),
  ('5', 'Italy'); #if this has visited 3 countries how do you add it?

3 个答案:

答案 0 :(得分:1)

首先,您需要一个表来存储用户访问过的国家。例如

var productList = dbContext.FactorItems.GroupBy(fi => new { fi.ProductId, fi.Product.Name }).Select(g => new
        {
            ProductId = g.Key.ProductId,
            ProductName = g.Key.Name,
            TotalSoldQty = g.Sum(x => x.Qty)
        }).OrderByDescending(x => x.TotalSoldQty).ToList();

插入表格:

CREATE TABLE countryVisited(
    userId INT not null
    country varchar(30) not null
)

您可以按以下方式加入:

INSERT INTO countryVisited (userId,country) VALUES
  (5, 'Norway'),
  (4, 'Spain'),
  (5, 'Italy')

更好的做法是,向SELECT id, name, c.country, capital FROM users u INNER JOIN countryVisited cv ON u.id = cv. userId INNER JOIN country c ON cv.country = c.country WHERE u.id=5 表中添加一个id字段,然后仅将该值而不是国家名称存储在country表中。

答案 1 :(得分:0)

您应该有另一个表,用于存储UserCountry之间的关系。像这样:

UserCountries Table

 UserID       CountryId
-------     -------------
   1              1
   1              2
   2              1
   2              3

然后您应该编写如下查询:

Select * from Country where Id in
(select CountryId from UserCountries
 where UserId = 5)

答案 2 :(得分:0)

编辑完您的问题后,我可以理解。现在,您可以使用该结构解决问题了。

编辑用户表,例如user_id,user_name,Visited_country_id。

当用户选择访问的国家/地区时,然后使用逗号分隔符更新用户表visit_country_id。举个例子

user_id用户名Visited_country_id 5塞利姆1,3,4

现在,您可以从country_id所在的国家/地区执行查询(例如select *)(从user_id = 5的用户中选择Visited_country_id)