2017-09-15 11 views
0

私は2つの表の請求書とinvoice_has_itemsを持っています。私はこれらの2つのテーブルを結合するとき、私は両方のテーブルからデータを受け取る:繰り返し値をNULLに置き換える方法

1

ここでは最初の3つの列は、請求書テーブルからです。私はこのような重複値を0またはnullに置き換えたい。

2

私のクエリは次のとおりです。

SELECT inv.*,invHas.* 
FROM invoice inv,invoice_has_item invHas 
WHERE invHas.invoiceID=inv.id 

私はこれをどのように達成することができますか?

+0

テーブルへの参加に使用するクエリを送信できますか? – Manav

+0

SELECT inv。*、invHas。* FROM請求書inv、invoice_has_item invHas WHERE invHas.invoiceID = inv.id; –

+0

これはSQLの仕事ではありませんが、クライアントコードで簡単に行うことができます(サブクエリと変数を使用してMySQLで行うことができますが、これは醜い解決策です)。しかし、それが機能するには、最初とおそらく4番目の列で行を並べる必要があります。それ以外の場合、データベースは特定の順序で行を返す必要はなく、要件は意味をなさない。 – axiac

答えて

0

あなたはランク付けして、条件文を使用することによって、これを達成することができます。このような

何か:

SELECT IF(rank=0, invoice_id, '-') AS invoice_id, 
     invoice_item_id 
FROM 
    (SELECT inv.id AS invoice_id, 
      invHas.id AS invoice_item_id, 
      @rank:=CASE WHEN @invoice <> inv.id THEN 0 ELSE @rank+1 END AS rank, 
      @invoice:=inv.id AS clset 
    FROM invoice inv, 
      invoice_has_item invHas, 

     (SELECT @rank:= -1) r, 

     (SELECT @invoice:= -1) i 
    WHERE invHas.invoiceID=inv.id 
    order by inv.id, invoice_has_item.id 
    ) AS ranked; 

をアイデアは、あなたの最初のクエリの出力をランク付けして、ベースの出力を変更することですランクにこの場合、インボイス内のすべての明細に対してランクが増加し、インボイスIDが変更されるとリセットされます。

ddlが指定されていないので、解はテストされません。

関連する問題