2014-12-12 2 views
-1

많은 R & D를 시도했지만이 쿼리로 내 질문을 설명 할 수 있습니다. 내가 뭘 잘못하고 있는지 모르겠다.mysql의 다른 테이블에서 데이터를 가져와 테이블에서 데이터 삭제

select color_code from color_master WHERE color_code like CONCAT('%','(select color_code from artist_upload_painting where painting_stock_status = 1)','%') 

나는 마스터 테이블 color_code 그 painting_stock_status 아래 = 1

+0

왜 내가 두 가지를 선택합니까? –

+0

IN 절을 사용하지 않는 이유는 무엇입니까? 'color_code from color_code where color_code IN (색상 _ 코드를 artist_upload_painting에서 선택하십시오. 여기서 painting_stock_status = 1)' – theLibertine

+0

color_code 테이블의 color_code가 "# 182461"이고 artist_upload_painting 테이블의 color_code가 "# 173a3c, # 81876c, # b0b191, 405e5a, # 565025, # 7a9ca0, # 4a3820, # 66563e, # a3ac8c ". – Abhimanu

답변

4

사용 (하위 쿼리) 테이블 artist_upload_painting의 color_code 필드에에서 행을 삭제할

delete from color_master WHERE color_code in (select color_code from artist_upload_painting where painting_stock_status = 1); 
+0

우선, 나는 그것이 어떤 데이터를 반환하는지 아닌지를보고 싶었다. 그래서 나는이 코드를 시도했다. 내가보고 싶었던 모든 – Abhimanu

0

시도 :

DELETE 
FROM master 
WHERE color_code IN (SELECT DISTINCT color_code 
        FROM artist_upload_painting 
        WHERE painting_upload_status = 1) 
+0

첫째는 일부 데이터를 반환 아닌지 IN color_code이 (painting_stock_status = 1 WHERE 을 artist_upload_painting 구별 color_code 를 선택) WHERE color_master * FROM 을 선택 . 그래서 나는이 코드를 시도했다. WHERE IN color_code – Abhimanu

+0

은 그래서 아무것도 반환 여부 ( painting_stock_status = 1 artist_upload_painting 구별 color_code 를 선택) color_master FROM * 선택 ? – SMA

+0

아니요 빈 세트가 반환됩니다. – Abhimanu

0

더 효율적이어야합니다.

이 쿼리를 실행하면
DELETE FROM color_master 
JOIN artist_upload_painting 
ON color_master.color_code = artist_upload_painting.color_code 
AND artist_upload_painting.painting_stock_status = 1 

종종이 프로세스 속도를 높이는 color_codepainting_stock_status 열을 artist_upload_painting 테이블에 인덱스를 추가 할 수 있습니다.

+0

이전에 SELECT 쿼리를 사용하여 결과를 볼 수 있습니까? 이 코드를 구현하십시오. 그래서이 난이 빈 세트를 리턴한다 선택 사용하면 color_master 에서 선택 * = 1 = – Abhimanu

+0

artist_upload_painting.color_code color_master.color_code ON AND artist_upload_painting.painting_stock_status artist_upload_painting JOIN을 시도. – Abhimanu

0
$queryToFindMatching = mysql_query("SELECT * FROM artist_upload_painting WHERE painting_upload_status = '1'"); 

while ($resultOfMatching = mysql_fetch_assoc($queryToFindMatching)){ 

    mysql_query("DELETE FROM color_master WHERE color_code = '{$resultOfMatching['color_code']}'"); 

} 

비록, 당신은 정말 .. 어쩌면 PDO 또는 mysqli_ * 모델을 고려 mysql_로 * 기능을 사용하고 OOP에 가려고해서는 안된다.

DELETE 
FROM color_master CM 
WHERE CM.color_code IN (
    SELECT AUP.color_code 
    FROM artist_upload_painting AUP 
    WHERE AUP.painting_stock_status = 1); 
+0

테이블 color_master의 color_code가 "# 182461"이고 artist_upload_painting 테이블의 color_code가 "# 173a3c, # 81876c, # b0b191, # 405e5a, # 565025, # 7a9ca0, # 4a3820, # 66563e, a3ac8c ". – Abhimanu

+0

"DELETE FROM color_master WHERE color_code LIKE '{$ resultOfMatching ['color_code ']}'" @Abhimanu – futureslay

+0

삭제하기 전에 SELECT를 사용하여이 쿼리의 결과를 볼 수 있습니까? – Abhimanu

0

이 시도해보십시오. @var = "SELECT * FROM artist_upload_painting"이라고 설정하십시오. painting_stock_status = '1' "; SELECT * FROM color_master WHERE color_code LIKE @var; 이 코드는 빈 세트를 반환합니다.

제발 이걸하십시오. @var = "artist_upload_painting FROM *을 선택 WHERE painting_stock_status = '1'"대신 *의 나 자신에 의해 내 문제를 해결 컬러 코드

0

@Abhimanu

내가 phpMyAdmin에이 코드를 사용했습니다 :

+0

ok sanket이 코드를 시도하고 있는데 – Abhimanu

+0

여전히이 코드는 빈 세트를 반환합니다. 이 쿼리는 1 개의 결과를 반환합니다. SELECT * FROM artist_upload_painting 어디서 painting_stock_status = '1'; – Abhimanu

+0

왜이 쿼리가 빈 집합을 반환하는지 알지 못합니다. mysql 및 두 쿼리의 데이터 구조를 더 자세히 설명하십시오. – sanket

1

에게 일치하는 특정 열 이름을 사용합니다. 여기에 해결책이 있습니다.

$del_Query = mysql_query("select DISTINCT(color_code) from artist_upload_painting where upload_painting_id = '$itemid'"); 
    while($Get_Result = mysql_fetch_array($del_Query)) 
    { 
    $master_color = explode(",",$GetResult['color_code']); 
    $uniq_color = array_unique($master_color); 
     foreach ($uniq_color as $color) 
     { 
      mysql_query("delete from color_master where color_code = $color"); 

     } 
    } 
관련 문제