2016-08-30 145 views
0

文件表(req1-7是需求的ID从另一个表)如何从另一个表中通过他们的ID从另一个表中获取值?

| document_id | document_name | document_amount | req_1 | req_2 | req_3 | req_4 | req_5 | req_6 | req_7 | 
|  1  | Diploma  |  40   | 1 | 3 | 4 |  4 | 6 | 7 | 8 | 

要求表

| requirement_id | requirement_name | 
| 1   | 1 x 1 picture | 
| 2   | 2 x 2 picture | 
| 3   | Registration form| 
| 4   | Clearance  | 
| 5   | Medical cert  | 
| 6   | xray result  | 
| 7   | excuse letter | 
| 8   | affidavit  | 
| 9   | comsoc clearance | 

预期的结果是类似的文件表,但与相应的显示的要求了名他们身份证的价值。

我想知道正确的语法来查询这些

到目前为止,我的查询是:

SELECT * FROM document_tbl 
      WHERE requirement1,requirement2,requirement3,requirement4,requirement5,requirement6,requirement7 
      IN (
       SELECT requirement_name FROM requirements_tbl WHERE requirement_id=requirement1,requirement2,requirement3,requirement4,requirement5,requirement6,requirement7)"; 

但我screwedup莫名其妙。先谢谢您的帮助。我会很感激。

+1

它与PHP有什么关系? – Aaron

+0

你用这个查询得到了什么输出? – phil652

+1

这是编写需求的低效方法。我建议你规范化你的数据库。参考这个:http://www.studytonight.com/dbms/database-normalization –

回答

0

像这样:

SELECT d.document_id, 
    d.document_name, 
    d.document_amount, 
    r1.requirement_name AS req_1, 
    r2.requirement_name AS req_2, 
    r3.requirement_name AS req_3, 
    r4.requirement_name AS req_4, 
    r5.requirement_name AS req_5, 
    r6.requirement_name AS req_6, 
    r7.requirement_name AS req_7 
FROM documents AS d, 
    requirements AS r1, 
    requirements AS r2, 
    requirements AS r3, 
    requirements AS r4, 
    requirements AS r5, 
    requirements AS r6, 
    requirements AS r7 
WHERE d.req_1 = r1.requirement_id 
    AND d.req_2 = r2.requirement_id 
    AND d.req_3 = r3.requirement_id 
    AND d.req_4 = r4.requirement_id 
    AND d.req_5 = r5.requirement_id 
    AND d.req_6 = r6.requirement_id 
    AND d.req_7 = r7.requirement_id 

等。

+0

这适用于@MartynasTumas。但正如他们上面所述。它以缓慢的方式处理输出,但它提供了准确的结果。谢谢 –

1

中间体表(document_requirements)

| document_id | requirement_id | 
|  1  | 1    | 
|  1  | 3    | 
|  1  | 4    | 
|  1  | 6    | 
|  1  | 6    | 
|  1  | 7    | 
|  1  | 8    | 

查询

SELECT d.document_id,dr.requirement_id,r.requirement_name 
FROM documents AS d 
JOIN document_requirements AS dr ON (dr.document_id=d.document_id) 
JOIN requirements AS r ON (r.requirement_id=dr.requirement_id) 
WHERE d.document_id = 1; 
+0

无法水平显示要求吗? @穆罕默德亚辛?不能用相应的名字显示吗? –

+0

这可能与7个子选择,但如上面提到的其他人一样,这将是非常低效的。使用这种方法,您仍然可以循环查看结果,并获取上面查询中包含的名称,作为“r.requirement_name” –

+0

@Mohammed Yasin我是否必须创建另一个名为document_requirements的表:如果是这样,那么名称是它包含的列?对不起,不回复。我忙于学校项目。 –

相关问题