mysql加入问题

时间:2008-12-04 11:01:11

标签: php mysql join

我有两个包含以下列的表:

表1:

id, agent_name, ticket_id, category, date_logged

表2:

id, agent_name, department, admin_status

我想要实现的是从table1中选择代理部门等于table2的所有行。

我尝试了一些不同的连接语句,但我要么语法错误,要么只是不能使用此表设置。对于MySQL而言,我是初学者,从我读过的内容来看,JOIN是处于复杂的一端!

我考虑过的另一个选项是将“department”列复制到table1中,但是这需要在前端进行更多编码,而我正在尝试查看是否可以在不执行此操作的情况下实现所需的结果。 / p>

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

我不太明白你的问题...... 只有table2有一个部门,他们唯一的共同点就是agent_name。

我怀疑你的真正含义是:你想要Table1中代理来自某个部门的所有行,这是你想要的吗?在这种情况下,这样的事情应该这样做(虽然没有测试过):

SELECT * FROM Table1 
      INNER JOIN Table2 
      ON Table1.agent_name = Table2.agent_name 
      WHERE Table2.department = 'somespecific value';
顺便说一句:(受别人说的启发)agent_name听起来像是一个字符串值,你真的应该考虑使用table2中的id作为table1中的一个键(让我们称之为agent_id)将它们链接在一起。外键(表之间的链接)应该是一个真正唯一的id。该部门应该也可能是一个id键。那就是:

SELECT * FROM Table1 
      INNER JOIN Table2 
      ON Table1.agent_id = Table2.id 
      WHERE Table2.department = 'somespecific value';

答案 1 :(得分:0)

虽然我不能完全理解,你需要什么以及表格如何相关,但我会尝试类似的东西:

select 
    a.id, a.agent_name, a.ticket_id, 
    a.category, a.date_logged, b.department
from 
    table1 a inner join table2 b on b.agent_name=a.agent_name

目前我假设您需要在agent_name上链接表。

BTW,连接是SQL谱中最简单的一端:)

答案 2 :(得分:0)

您希望在两个表中添加唯一的关系密钥,而不是在两个表中都使用代理名称。像这样:

Table1: id, agent_id,  ticket_id, category, date_logged
Table2: agent_id, agent_name, department, admin_status

一个SQL示例:

SELECT t2.agent_name, t1.date_logged FROM table1 t1
INNER JOIN table2 t2 ON t2.agent_id = t1.agent_id

但是你可能想要使用某种外连接,所以我建议你看看互联网上的一些文章。