我有这 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/