性能會吸...
但是,如果你真的不能用加入...我認爲mySQL允許你使用別名在選擇後面的表達式中的列。
如果我可以假設
- 每個tblbillheader.customerID有且只有一個客戶相關記錄...
- 每個客戶ID將有許多條目tblBillHeader
- tblBillDetail.BillNumber聯營一個在tblBillHeader只有一個記錄
- tblBillDetail可能有很多記錄一個tblBillHeader.BillNumber
然後,您必須從一對多鏈中的記錄數最多的表開始......在這種情況下tblbillDetail。而所有其他表必須基於它進行子查詢。
SELECT (SELECT BillNumber FROM tblBillHeader WHERE tblBillHeader.BillNumber = tblBillDetail.BillNumber) BillNumber
, (SELECT BillNumber FROM tblBillHeader WHERE tblBillHeader.BillNumber = tblBillDetail.BillNumber) BillDate
, (SELECT CustomerID FROM tblBillHeader WHERE tblBillHeader.BillNumber = tblBillDetail.BillNumber) CustomerID
, (SELECT CustomerName FROM tblCustomer WHERE tblCustomer.CustomerId = CustomerId) as CustomerName
, ProductId
from tblBillDetail
我不確定的唯一一個是customerName。由於tblBillDetail沒有customerID,我們必須從頭文件獲取它;但由於我們不能使用連接,所以唯一的方法是從先前的內聯選擇查詢的結果中獲取它。我知道Oracle,DB2或SQL Server會支持這個概念;但我想我已經看到它在mySQL中完成了。
,但如果沒有,我們可以有一個嵌套子查詢,以得到它的工作我想......
SELECT (SELECT BillNumber FROM tblBillHeader WHERE tblBillHeader.BillNumber = tblBillDetail.BillNumber) BillNumber
, (SELECT BillNumber FROM tblBillHeader WHERE tblBillHeader.BillNumber = tblBillDetail.BillNumber) BillDate
, (SELECT CustomerID FROM tblBillHeader WHERE tblBillHeader.BillNumber = tblBillDetail.BillNumber) CustomerID
, (SELECT CustomerName FROM tblCustomer WHERE tblCustomer.CustomerId = (SELECT CUSTOMERID from tblbillHeader where tblBillHeader.BillNumber = tblBillDetail.BillNumber)) as CustomerName
, ProductId
from tblBillDetail
現在,也許你不能使用INNER JOIN,但老式的聯接將被允許?如果這樣的話
SELECT BH.BillNumber
, BH.BillDate
, C.CustomerID
, C.CustomerName
, BD.ProductId
FROM tblBillDetail BD, tblBillHeader BH, tblCustomer C
WHERE BD.BillNumber = BH.BillNumber
and C.CustomerID = BH.CustomerID
但是,這是加入語法的風格,所以我不認爲這是基於你的問題允許的。
編輯你的問題,並提供樣本數據和預期結果。 –
嘗試查找連接 – OTTA
我不允許使用JOINS。我使用WHERE子句和JOINS得到了想要的結果。應該在不使用JOIN的情況下編寫此特定查詢。 (只使用子查詢) –