1

PatientIDに基づいてデータベースから請求書データを取得しようとしています。どの請求書がどの患者のものかを把握しようとしています。これが私の構造の重要な部分です。

請求書テーブル

InvoiceNumber | DateInvoice | DueDate | StudyID | TypeInvoice 

患者表

FirstName | LastName | PatientID

InvoiceFields

id | InvoiceNumber | PatientID | 

PatientIDに基づいて請求書テーブルのデータを一覧表示するクエリを作成する必要があります。以下は私が試みたクエリですが、どこにもありません。お時間をいただきありがとうございます。

SELECT    Distinct
          invoicefields.InvoiceNumber,
          invoices.DateInvoice
FROM      `invoices`, `patients`, `invoicefields`
WHERE     invoicefields.PatientID = patients.PatientID
          and invoicefields.InvoiceNumber = invoicefields.InvoiceNumber
GROUP BY  invoicefields.InvoiceNumber
4

2 に答える 2

2
SELECT InvT.InvoiceNumber, InvT.DateInvoice
FROM InvoiceTable InvT
INNER JOIN InvoiceFields InvF ON InvF.InvoiceNumber = InvT.InvoiceNumber AND InvF.PatientID = @PatientID

InvoiceTable からのデータのみが必要で、PatientID を持っていることを示しているため、ほとんど同じです。クロス リファレンス テーブル InvoiceFields に参加し、そのクエリで PatientID 列を使用して、必要なものに絞り込むことをお勧めします。患者から何も必要ないことに気付く前に、存在を使用したより複雑な例がありました。

患者に関する情報も必要な場合は、これを使用できます(必要な列を選択に入れるだけです)

SELECT InvT.InvoiceNumber, InvT.DateInvoice
FROM InvoiceTable InvT
INNER JOIN InvoiceFields InvF ON InvF.InvoiceNumber = InvT.InvoiceNumber AND InvF.PatientID = @PatientID
INNER JOIN Patient Pat ON Pat.PatientID = InvF.PatientID

@PatientID 部分は、Patient フィールドまたは InvoiceFields の結合に配置できます。インデックスが正しければ、どちらの方法でもパフォーマンスに違いはありません。

以下のコメントへの応答ですが、よりきれいに表示できる場所は次のとおりです。

SELECT  IT.InvoiceNumber
       ,IT.DateInvoice
FROM    InvoiceTable InvT
WHERE   EXISTS (SELECT  InvF.PatientID
                FROM    InvoiceFields InvF
                WHERE   InvF.InvoiceNumber = InvT.InvoiceNumber
                AND InvF.PatientID = @PatientID)

これにより、InvoiceTable から患者のすべての行が返され、InvoiceNumber が Unique の場合、重複はありません。ただし、この方法では InvoiceTable にアクセスしてデータを返すことしかできません。1 つだけが必要な場合は、その上に TOP 1 を置きます。

SELECT  TOP 1 IT.InvoiceNumber
       ,IT.DateInvoice
FROM    InvoiceTable InvT
WHERE   EXISTS (SELECT  InvF.PatientID
                FROM    InvoiceFields InvF
                WHERE   InvF.InvoiceNumber = InvT.InvoiceNumber
                AND InvF.PatientID = @PatientID)
于 2012-07-13T18:55:51.133 に答える
1
SELECT * from invoices i
inner join invoicefields iFld
    on i.invoiceNumber = iFld.invoiceNumber
inner join patients p
    on iFld.patientID = p.patientID
    and p.patientID = 1235125

これにより、少なくとも正しい方向に進むことができます。どの列を返したいか、またはテーブルに null があるかどうかがわかりません。Null は返される行に影響します

于 2012-07-13T18:50:44.177 に答える