想知道是否有人可以帮助解决以下问题。
我有三个表
表 1,商店:
sID | sName
表 2,客户:
cID | cFName | cLName
表 3,交易:
tID | cID | tInvoiceNo | sID | tPaymentType | tTotal
表 3 中的示例交易是
1 | 001 | 1023 | S01 | CASH | 20
2 | 001 | - | 002 | FRIENDGIFT | 10
第一行是客户 001(即 bob)和商店 S01(即 toysRus)之间的实际交易,并且 bob 以现金支付($20)。
第二行是 001 (bob) 送给客户 002 (jim) 10 美元的礼物。
问题
这一切都很好,但我试图获得的是一个 SQL 语句,它不仅打印出像 001、002 和 S01 这样的 ID,而且还打印出相应的名称......作为 ID 对用户来说没有任何意义。
例如,对过去 5 笔交易的 sql 查询应该给我这样的输出
1 | 001 | bob | smith | 1023 | S01 | Toys R us | CASH | 20
2 | 001 | bob | smith | - | 002 | jane | black | FRIENDGIFT | 10
条件
除了支付类型 FRIENDGIFT 之外的所有内容都将始终是表 1 (SHOP) 中的 ID...您可以在 SQL 中使用 IF 语句吗?也许某种加入?
或者是不可能在单个查询中完成,需要拆分成 2 个? ...一个是获取过去的交易,一个是根据 tPaymentType 获取每个 ID 的名称(我使用 php 通过 mysql 获取结果,所以两个查询不会有问题,只是我想处理尽可能少的查询可能)
我希望我没有让任何人感到困惑:D
提前致谢!
解决方案
非常感谢 mario,这是生成的 sql 查询。
SELECT *
FROM Transactions
LEFT JOIN Customer USING (cID)
LEFT JOIN Shop USING (sID)
LEFT JOIN Customer c ON c.cID = sID
ORDER BY tID DESC
LIMIT 5
最佳答案
确实有一种简单的方法可以让一个查询从多个表中累积数据。
SELECT *
FROM Transactions
LEFT JOIN Customer USING (cID)
LEFT JOIN Shop USING (sID)
ORDER BY tID DESC
LIMIT 5
如果要连接的表中的列名相同,则可以使用更简单的 USING
条件。但是还有 ON
子句允许其他条件(但是需要表别名)。
参见 http://dev.mysql.com/doc/refman/5.1/en/join.html
关于php - 从 3 个 sql 表收集数据以创建单个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5770254/