2015-01-09 3 views
0

나는 약 3000 개의 키워드 및 model_ids와 함께 테이블 tbl_random을 가지고있다.다른 테이블에서 임의의 레코드로 지정된 mySQL 테이블을 업데이트하는 방법

+---------+------------+---------+---------+--------------+ 
| keyword | model_id | make | model | more_data | 
+---------+------------+---------+---------+--------------+ 
| apple1 | 15   |   |   |    | 
| apple2 | 15   |   |   |    | 
| pear | 205  |   |   |    | 
| cherry | 307  |   |   |    | 
| melon | 5023  |   |   |    | 
+---------+------------+---------+---------+--------------+ 

내가 그들에 대해 실제 제품과 세부 사항을 포함 약 50 만 레코드 두 번째 테이블 tbl_products 있습니다 :

+---------+--------+------------+ 
| make | model | more_data | 
+---------+--------+------------+ 
| app1 | 15  | data1  | 
| app1 | 15  | data2  | 
| cher74 | 307 | data4  | 
| melo2 | 5023 | data5  | 
| pear53 | 205 | data3  | 
+---------+--------+------------+ 

두 테이블 사이의 공통 식별자 키워드 model_ids이 아닌, 고유 각각 model_idmodel입니다. 에서 모든 model_id 일치

를 쿼리가 tbl_products에서 한 임의 행을 선택한다 : 내가해야 할 일은

그 기준에 따라 tbl_random에서 makemodelmore_data를 업데이트 할 것 UPDATE MySQL의 쿼리를 작성하는 것입니다 고유 한 키워드는 tbl_random입니다.

나는 UPDATE, LEFT JOIN 및 SELECT STATEMENTS를 사용하여 다양한 방법으로이 작업을 시도했지만 지금까지는 작동하지 않습니다. 단지 make 업데이트하려고

내 최신 문은, 그러나 그것은 작동하지 않습니다,이 하나입니다 - MySQL은 그것을 실행을 시작하고 아무것도 내가 다시 사용할 얻기 위해 MySQL을 다시 시작해야한다는 것을 제외하고는 발생하지 :

UPDATE tbl_random 
     SET tbl_random.make = 
     (SELECT tbl_products.make FROM tbl_products      
     WHERE tbl_random.model_id = tbl_products.model 
     GROUP BY tbl_random.keyword  
     ORDER BY RAND()) 

tbl_random에 대한 최종 원하는 출력이 하나입니다

+---------+------------+---------+---------+--------------+ 
| keyword | model_id | make | model | more_data | 
+---------+------------+---------+---------+--------------+ 
| apple1 | 15   | app1 | 15  | data1  | 
| apple2 | 15   | app1 | 15  | data2  | 
| pear | 205  | pear53 | 205 | data3  | 
| cherry | 307  | cher74 | 307 | data4  | 
| melon | 5023  | melo2 | 5023 | data5  | 
+---------+------------+---------+---------+--------------+ 

어떤 도움이나 제안이 이해할 수있을 것이다!

+0

위의 select 문만 실행하면 다음과 같이 나타납니다. '# 1054 -'where clause '의'tbl_random.model_id '에 알 수없는 열 – BradG

+0

btw, 내가 성공적으로 수행 한 작업은 두 테이블을 외부 조인하는 것입니다. 이 문, 난 단지 그에 따라'tbl_random' 테이블을 업데이트 할 수없는 것 : \t \t \t \t \t \t 이 tbl_random에서 왼쪽 외부 조인,'tbl_random.keyword, tbl_random.model_id, tbl_products.make, tbl_products.model을 선택 \t \t \t \t \t \t tbl_products \t \t \t \t \t ON tbl_random.model_id = tbl_products.RAND에 의해 tbl_random \t \t \t \t \t \t 주문 \t \t \t \t \t \t GROUP 모델()' – BradG

+0

@Strawberry, 예상대로 당신의 작품 위 내 댓글에 문 및 데이터 내가 그것을 필요로하는 방법을 제공합니다. 그러나 선택 쿼리에서 가져 오는 것이 아니라 상수 테이블에서 업데이트해야합니다. 만약 당신이 다른 제안을 가지고 있다면 기꺼이 토론 할 것입니다. – BradG

답변

-1

내부 선택에서 두 개 이상의 항목을 반환 한 다음 단일 입력란에 할당하려고합니다.

내부 선택에 LIMIT 1을 추가해보십시오.

UPDATE tbl_random 
    SET tbl_random.make = 
    (SELECT tbl_products.make FROM tbl_products      
    WHERE tbl_random.model_id = tbl_products.model 
    GROUP BY tbl_random.keyword  
    ORDER BY RAND() LIMIT 1) 

나는 전나무 옵션

REPLACE tbl_random (keyword, model_id, make, model) INTO 
    SELECT rand2.keyword, rand2.model_id, (SELECT tbl_products.make FROM tbl_products      
     WHERE rand2.model_id = tbl_products.model 
     ORDER BY RAND() LIMIT 1), rand2.model_id 
    FROM tbl_random as rand2 

을하지 않는 경우이 작업을 거라고 생각 그럼 당신은하고 고유 키와 같은 모델을 사용하여 more_data를 업데이트하는 두 번째 쿼리를 실행해야합니다.

+1

TOP는 MySQL이 아닙니다. – Strawberry

+0

UPDATE tbl_random SET의 tbl_random.make는 = 는 –

+0

감사 – Leo

관련 문제