1

我有两张桌子。一个是account,另一个是client桌子。用户将提供输入,在这种情况下是19. 我想要做的是,我只想从用作标识符中选择一个,并且只使用 一个select语句 。我可以做两次选择查询,但这不是我想要的。nameclientclient_id

所以为了更好地解释它:用户提供诸如 $id = 之类的输入19,我将使用idfrom accounttable 来确定client_id在这种情况下哪个是17name然后,我将client使用client_id.

account桌子
帐户表

client桌子
在此处输入图像描述

我已经看过了joinleft join但我仍然卡住了。请帮我解决一下这个。提前致谢。

我当前不工作的代码:

$sql = " SELECT account.id, client.client_id\n"
    . " FROM account, client\n"
    . " WHERE account.id = 19";
4

8 回答 8

3

一个简单的内部连接将完成任务

 $query = "select 
                  account.id,client.client_id 
           from 
                  account 
           join 
                  client 
            on 
                  account.client_id = client.client_id 
           where 
                  account.id = 19";
于 2013-06-03T19:02:00.670 回答
1

这应该使用INNER JOIN

SELECT c.name
FROM Client C
   INNER JOIN Account A ON C.Client_Id = A.Client_Id
WHERE A.Id = 19

您的查询正在生成笛卡尔积,因为您没有加入任何字段上的表。

于 2013-06-03T19:01:43.067 回答
1

您没有加入账户和客户。此外,您只需要客户端名称,查询必须是:

Select distinct client.client_name from account, client where client.client_id=account.account_id and account_id=19 
于 2013-06-03T19:02:40.953 回答
1

您需要指定用于连接两个表的列。

关于 SQL 语言的一个不幸事实是,默认行为是通过将一个表中的每一行与另一个表中的每一行进行匹配来连接两个表。也就是说,每个可能的配对都是结果集的一部分。SQL 没有任何方法可以推断您要使用哪个列作为连接条件,因此您必须自己指定条件。

这是查询的更好形式:

$sql = " SELECT account.id, client.client_id
    FROM account JOIN client USING (client_id) 
    WHERE account.id = 19";

一定要使用JOIN语法。自 1992 年以来,它一直是在 SQL 中进行连接的标准方式。逗号样式的语法仅用于向后兼容 1992 年之前的 SQL。它们的执行方式完全相同,但 1992 年的语法可以进行外连接,并且更易于阅读。

PS:PHP 支持多行字符串,因此无需像您那样将字符串连接在一起。这是 Java 的习惯。

于 2013-06-03T19:03:25.043 回答
0
$sql = " SELECT account.id, client.client_id
           FROM `account`
     INNER JOIN `client` ON `client`.client_id = `account`.`client_id`
          WHERE account.id = 19";
于 2013-06-03T19:02:07.423 回答
0

由于您没有提供有关客户表结构的信息,这只是一个猜测:

SELECT account.id, client.client_id
FROM account, client
WHERE account.id = 19
  AND account.client_id = client.id
于 2013-06-03T19:02:32.870 回答
0

也许你应该尝试:

$sql = "SELECT account.id, client.client_id
        FROM account, client
        WHERE account.client_id=client.id AND account.id = 19 "
于 2013-06-03T19:03:27.420 回答
0

这应该为你做选择 c.name, c.client_id, a.id from account a left join on client c on a.client_id = c.client_id where a.id = 19

于 2013-06-03T19:05:14.210 回答