MySQL根据另一个表中的id数据从一个表返回结果

时间:2015-01-31 18:54:06

标签: php mysql

我试图在这个问题中做到这一点,但我在#stackoverflow上太年轻以发表评论。 MySQL returning results from one table based on data in another table

我无法让这个工作。我的意图略有不同。 我打算一起工作,有两个表(以及将来会有更多表)。我想保持我的数据库大小,所以我没有使用完整的单词来引用time_code_department,而是添加了一个列来引用“department_id”。现在我想从表中获取所有“time_codes”,其中“time_code_depart”id与输入的变量匹配。 因此,如果用户选择“Solar”部门并且time_code_department表具有“9”作为“solar”“department_id”,那么我想返回“time_codes”中具有“department_id”“9”的所有条目time_codes表。在这个例子中哪一行是id 40和75。

表格结构:

 ----------------------------------------------
|                 time_codes  (table)          |
|                                              |
| id | department_id | code_number | code_name |
 ----------------------------------------------
| 40 | 9             | 35          | Safety    |
| 52 | 10            | 725         | Inventory |
| 75 | 9             | 18          | Cabinets  |
 ----------------------------------------------


 -----------------------------------
|      time_code_depart (table)     |
|                                   |
| department_id | name    | manager |
 ----------------------------------- 
| 9             | Solar   | John    |
| 10            | Finance | Mary    |
| 11            | Design  | Sue     |
 -----------------------------------

我试过查询:

SELECT 'department_id' 
FROM `time_codes` 
INNER JOIN `time_code_depart` 
ON 'time_codes.department_id' = 'time_code_depart.department_id' 
WHERE 'name' LIKE 'Solar'

SELECT 'time_codes.id', 'time_codes.code_number', 'time_codes.code_name' 
FROM `time_codes` 
ON 'time_codes.department_id' = 'time_code_depart.department_id' 
WHERE 'time_code_depart.name' 
LIKE 'Solar'

这两个基于关于该主题的几个读数而形成,并且我使用了几种变体的sentax。我无法让它返回id 40和75行的条目。 你能帮我辨别我哪里错了吗?

1 个答案:

答案 0 :(得分:1)

引用时有几个问题。

首先,要引用MySQL中的表名或列名,请使用反引号;单引号用于制作字符串。

其次,当你有一个table.column时,你必须分别引用它们。

请注意,通常不需要引用表名和列名。如果它们与保留字相同或包含标点字符,则只需要引用它们。

SELECT `time_codes`.`department_id`
FROM `time_codes`
INNER JOIN `time_code_depart`
ON `time_codes`.`department_id` = `time_codes_depart`.`department_id`
WHERE `name` LIKE 'Solar'

当你有这样的长表名时,我建议使用表别名来使表达式更具可读性:

SELECT tc.department_id
FROM time_codes AS tc
INNER JOIN time_code_depart AS tcd
ON tc.department_id = tcd.department_id
WHERE name LIKE 'Solar'