2012-12-15 1 views
1

테이블 barangjml_tersedia 컬럼을 업데이트하는 데 문제가 있습니다. 값은 barang.jml_tersedia = pembelian.jml_beli - penjualan.jml_jual이어야합니다.FROM 절의 업데이트 대상 테이블 'barang'을 지정할 수 없습니다.

update barang set jml_tersedia = 
(
    (select ifnull(sum(jml_beli), 0) 
    from pembelian 
    where pembelian.id_barang = (select id_barang 
           from barang 
           where nama_barang = 'folio') 
) - 
    (select ifnull(sum(jml_jual), 0) 
    from penjualan 
    where penjualan.id_barang = (select id_barang 
           from barang 
           where nama_barang = 'folio') 
) 
) 
where barang.nama_barang = 'folio'; 

그것은 나에게 You can't specify target table 'barang' for update in FROM clause을했다 :

여기 내 코드입니다. 누구든지 도와 줄 수 있습니까? 감사.

답변

1

MySQL은 사용자가 선택하는 동일한 테이블을 수정할 수 없지만 UPDATE 절에 여러 테이블을 지정할 수있게합니다.

UPDATE 검색어가 LEFT JOIN 인 것을 중첩 된 하위 SELECT '대신 사용하도록 수정했습니다.

이 쿼리가 필요한 것을 정확히 수행 할 수 있는지 확실하지 않으므로 먼저 barang.jml_tersedia에 대해 원하는 업데이트 값을 가져와야합니다. 같은, 당신이 올바른 업데이트 값을 반환 확실하면

SELECT 
    (
     IFNULL(SUM(pb.jml_beli), 0) - 
     IFNULL(SUM(pj.jml_jual), 0) 
    ) AS new_jml_tersedia 
FROM 
    barang ba 
    LEFT JOIN pembelian pb ON (ba.id_barang = pb.id_barang) 
    LEFT JOIN penjualan pj ON (ba.id_barang = pj.id_barang) 
WHERE 
    ba.nama_barang = 'folio'; 

, 당신은 그것을 실행할 수 있습니다 :

가 확인 : 여기는 SELECT 쿼리로 다시 표현한

업데이트 :

UPDATE 
    barang ba 
    LEFT JOIN pembelian pb ON (ba.id_barang = pb.id_barang) 
    LEFT JOIN penjualan pj ON (ba.id_barang = pj.id_barang) 
SET 
    ba.jml_tersedia = (
     IFNULL(SUM(pb.jml_beli), 0) - 
     IFNULL(SUM(pj.jml_jual), 0) 
    ); 
WHERE 
    ba.nama_barang = 'folio'; 

그리고,이 답변이 작동하지 않는 경우 밖으로 나오면 다른 해결책을 찾기 위해 excellentanswers을 볼 수 있습니다.

마지막으로 UPDATE Syntax에 대한 자세한 내용은 MySQL 설명서를 참조하십시오.

+0

감사합니다. 그것은 내가 필요로하는 것처럼 작동합니다! IFNULL (SUM (pj.jml_jual), 0) \t - 그냥>'ba.jml_tersedia = ( \t ( \t IFNULL (SUM (pb.jml_beli를 선택), 0)가되도록 SET 블록을 편집해야)' – Dewanta