mysql - 使用 mySQL 查询 3 个不同的表

标签 mysql sql database

我有这 3 个表:

___发票:

|--------|---------------|
| INV_Id | IVC_BookingId |
|--------|---------------|
| 10     | 31            |
|--------|---------------|

___预订:

|--------|-------------|---------------|---------------|
| BOO_Id | BOO_GuestId | BOO_CompanyId | BOO_BillingId |
|--------|-------------|---------------|---------------|
| 10     | 89            90            | 0             |
|--------|-------------|---------------|---------------|

___卡迪斯:

|--------|----------|-------------|-------------|
| KDX_Id | KDX_Type | KDX_Name    | KDX_Company |
|--------|----------|-------------|-------------|
| 89     | guest    | Frank       |             |
| 90     | company  |             | Google      |
|--------|----------|-------------|-------------|

我想找到链接卡用户的发票。

例如,对于 INV_Id = 10,它应该返回我:

|--------|-------|---------|---------|
| INV_Id | guest | company | billing |
|--------|-------|---------|---------|
| 10     | Frank | Google  | 0       |
|--------|-------|---------|---------|

billing 实际上是空的,因为我的发票和预订和 kardex 之间没有任何现有的类似内容。

所以我的尝试如下:

SELECT IVC_Id, IVC_BookingId, IFNULL(BOO_GuestId, 0) AS BOO_GuestId, IFNULL(BOO_CompanyId, 0) AS BOO_CompanyId, IFNULL(BOO_BillingId, 0) AS BOO_BillingId, KDX_Name, KDX_Company 
FROM ___Invoices 
JOIN ___Bookings
ON ___Bookings.BOO_Id = ___Invoices.IVC_BookingId
LEFT JOIN ___Kardex
ON ___Kardex.KDX_Id = ___Bookings.BOO_BillingId
WHERE IVC_Id='10'

我没有错误,但我可以从 ___Kardex 表中获取名称或公司。

你知道为什么吗?

这里是 SQL fiddle :http://sqlfiddle.com/#!9/211d01/1

谢谢。

最佳答案

我不太确定您的关系或外键。但是根据您提供的内容,我认为这可以。可能需要稍作修改,但我想您会明白的。

SELECT ___Invoices.IVC_Id, k1.KDX_Name as guest, k2.KDX_Company as company
FROM ___Invoices 
JOIN ___Bookings
ON ___Bookings.BOO_Id = ___Invoices.IVC_BookingId
LEFT JOIN ___Kardex k1 ON ___Bookings.BOO_GuestId = k1.KDX_Id
LEFT JOIN ___Kardex k2 ON ___Bookings.BOO_CompanyId = k2.KDX_Id
WHERE ___Invoices.IVC_Id='10'

请检查一下,如果这是您想要的,请告诉我。

http://sqlfiddle.com/#!9/211d01/31

如有任何疑问,请随时提出。希望对您有所帮助:)

关于mysql - 使用 mySQL 查询 3 个不同的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51219713/

相关文章:

mysql - 如何在 SQL 中连接两个带有 id 和最近的下一个日期的表?

mysql - 在 SQL 中旋转一个简单的表

python - 在数据库中实现匹配

mysql - Symfony 2 自引用多对多存储库

php - jQuery 函数动态加载更多数据

c# - 如何将事件处理程序添加到 DataGrid 按钮(该按钮是基于数据库动态添加的)?

database - 无法从数据库表中获取消息。 ErrorException 说 :count(): Parameter must be an array or an object that implements Countable

c# - 如何用新信息更新数据库

php - 将 GD 文件调整大小和重命名添加到 php 图片上传脚本

mysql - 何时在 MySQL 中使用单引号、双引号和反引号