使用@searchValue从数据库中获取数据

时间:2017-09-05 01:55:00

标签: sql create-table

我已经给了两个表,我想解决以下任务:

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

    enter image description here

  3. 我研究了https://social.technet.microsoft.com/wiki/contents/articles/19854.tutorial-many-to-many-dimension-example-for-sql-server-analysis-services.aspx和类似How 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表的作用是什么?这个查询是否正确?

1 个答案:

答案 0 :(得分:0)

问题是"返回为公司工作的所有人员#34;和"其中名称或描述包含搜索词"。现在,当问题显示"其中名称或描述包含搜索词"时,它表示某个人工作的公司的名称或描述。

因此,很可能,您应该将存储在person表中的人员的person实体作为firstName,lastName,dateOfBirth返回给公司工作,该公司存储在名称或描述与搜索值匹配的Company表中。您的工作表是包含任何为公司工作的人员的详细信息的工作表。这个表通常应该有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 + '%'))