【问题标题】:fetch data from database using @searchValue使用 @searchValue 从数据库中获取数据
【发布时间】:2017-09-05 01:55:00
【问题描述】:

我给了两张表,我想解决以下任务:

  1. 编写 SQL DDL 以创建名为 Job 的新表,以多对多关系将人员与公司相关联。
  2. 提供一个名为 @searchValue 的 SQL 参数,创建一个 SQL 查询,该查询将返回在名称或描述中包含搜索词的公司工作的所有人员。

我研究过https://social.technet.microsoft.com/wiki/contents/articles/19854.tutorial-many-to-many-dimension-example-for-sql-server-analysis-services.aspxHow to make SQL many-to-many same-type relationship table 之类的类似问题,但仍然无法弄清楚。

我尝试解决问题 (1) 如下,但想知道是否建议在作业表中添加 job-id 作为主键?

create table Job
(
  person_id int,
  company_id int,
  CONSTRAINT person_cat_pk PRIMARY KEY (person_id, company_id),
  CONSTRAINT FK_ person
      FOREIGN KEY (person_id) REFERENCES person (person_id),
  CONSTRAINT FK_company
      FOREIGN KEY (company_id) REFERENCES category (company_id)
);

我也试过解决问题(2):

SELECT * FROM Company WHERE (name LIKE '%' + @searchValue + '%') OR (description  LIKE '%' + @searchValue + '%') 

那么,问题2中Job表的作用是什么?这个查询正确吗?

【问题讨论】:

  • 您可能需要添加一个 (..)OR (@searchValue IS NULL) 以允许所有选项。至于 IDENTITY 键,我说继续...空格不是像以前一样受到限制,而这把钥匙将使未来的 CRUDS 更容易。

标签: sql create-table


【解决方案1】:

问题是“返回所有为公司工作的人”和“名称或描述包含搜索词的位置”。现在,当问题说“名称或描述包含搜索词的位置”时,它表示某人工作的公司的名称或描述。

因此,最有可能的是,您应该为存储在人员表中的人员返回一个人员实体,该人员以 firstName、lastName、dateOfBirth 的形式为存储在公司表中的公司工作,其名称或描述与搜索值匹配。您的工作表包含有关为公司工作的任何人的详细信息。该表通常应该还有 2 个字段,JobStartDate、JobEndDate,也可能是角色,但可能不是问题的一部分。所以,你的查询应该像

    SELECT a.firstName, a.lastName, a.dateOfBirth 
FROM Person a INNER JOIN Job b ON a.id = b.person_id 
INNER JOIN Company c ON b.company_id = c.id 
WHERE ((c.name LIKE '%' + @searchValue + '%') 
OR (c.description  LIKE '%' + @searchValue + '%'))

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 2012-03-04
    • 2016-11-21
    • 2014-04-10
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多