我有表'A',其中包含ID,名称,性别,帐号。表B具有ID,名称,性别,account_number等。表B存储有关不同帐户用户和号码的所有信息。我想要表A中具有account_number例如123456的行与表B中具有相同account_number的行匹配,然后打印表B中的所有信息。

我尝试这样做,但无法正常工作.........

<? php

require_once 'dbconfig.php';

    $stmt = $db_con->prepare("SELECT * FROM trans INNER JOIN reg ON reg.Accnumber = trans.Transfer_id ");
    $stmt->execute();
    while($row=$stmt->fetch(PDO::FETCH_ASSOC))
    {
        ?>
        <tr>
        <td height="38"><?php echo $row['re_name']; ?></td>
        <td><?php echo $row['Bank_name']; ?></td>
        <td><?php echo $row['re_number']; ?></td>
        <td>$<?php echo $row['re_amount']; ?></td>
        <td><?php echo $row['swift_code']; ?></td>
        <td><?php echo $row['t_date']; ?></td>
        <td align="center">
          <?php


请我需要帮助

最佳答案

你是说左加入?
从表A中选择所有值,然后仅在表A中有数据时才从表B中获取数据?

SELECT a.*, b.*
FROM a
LEFT JOIN b USING(account_number)


注意,第一个表应该是数据较少的表。
如果您的交易清单较小,并且想要获取帐户持有人的详细信息,则为:

SELECT *
FROM trans
LEFT JOIN reg ON reg.accnumber = trans.accnumber
WHERE reg.accnumber = '123456'


并且,如果您有客户的清单,并希望为其找到交易,请执行以下操作:

SELECT reg.*, group_concat(trans.transfer_id)
FROM reg
LEFT JOIN trans USING (accnumber)
GROUP BY reg.accnumber


并且您可以过滤该数据,但是如果您的客户有多个事务,则可能需要使用Have而不是Where:

SELECT reg.*, count(trans.transfer_id) as qty
FROM reg
LEFT JOIN trans ON reg.accnumber = trans.accnumber
GROUP BY reg.accnumber
HAVING reg.accnumber = '123456'


如果仅需要事务,则可以从一个表中请求它:

SELECT * FROM trans WHERE accnumber = '123456'


而且,如果您的表已规范化,则trans表中不应有accnumber字段,reg.id的唯一外键是,那么您的查询将是:

SELECT trans.*
FROM trans
LEFT JOIN reg ON reg.id = trans.user_id
WHERE reg.accnumber = '123456'

10-06 15:30