2010-02-16 45 views
6

Tôi có một bảng mysql 'alfa' sẽ chứa khóa chính của một bảng 'beta' trong một cột. Nhưng nếu không thể tìm thấy mục nhập trong 'beta', tôi muốn chèn giá trị vào 'beta' và sử dụng khóa mới trong 'alfa'. Tôi có thể làm điều này trong một truy vấn bằng cách nào đó?chèn nếu không tồn tại khác chỉ cần chọn trong mysql

Tôi hiện có:

INSERT INTO alfa SET c1=(SELECT id FROM beta WHERE name = 'john'); 

mà hoạt động tốt khi 'john' tồn tại trong bảng, nhưng thất bại khác. Vì vậy, tôi có thể cải thiện nó để cho tên mới được chèn vào và lựa chọn nếu nó không phải là đã có? id được auto_incremented.

Tôi đã cố gắng xem xét IF nhưng chưa tìm ra cách sử dụng IF bên ngoài SELECT, điều đó có khả thi không?

Tôi biết tôi có thể làm điều đó trong một số truy vấn nhưng tôi đang nói chuyện với một cơ sở dữ liệu từ xa để có thể được tốt đẹp để làm điều đó tất cả cùng một lúc.

Ví dụ các bảng có thể đã được tạo ra như thế này:

CREATE TABLE alfa (
    c1 int, 
    PRIMARY KEY (c1) 
) 

CREATE TABLE beta (
    id int auto_increment, 
    name varchar(255), 
    PRIMARY KEY (id) 
) 

nên alfa.c1 nên tham khảo các giá trị beta.id.

Nói tóm lại tôi muốn làm:

chèn id cho john từ bảng beta vào c1 trong alfa, nếu john không tồn tại trong phiên bản beta sau đó chèn john vào phiên bản beta và chèn tự động mới tăng lên id cho john vào c1 trong alfa.

+0

Bạn có thể chỉnh sửa câu hỏi của mình và ít nhất là đặt cấu trúc bảng? Không rõ bạn sẽ có thông tin bổ sung nào bạn cần trong bản beta? Và làm thế nào có thể alfa có thể có bất kỳ chìa khóa, nếu nó chưa được tạo ra trong phiên bản beta? –

+0

Tôi đã cố thêm nhiều thông tin ngay bây giờ. – Zitrax

Trả lời

3

Tôi sẽ đi, nhưng lưu ý rằng đến từ nền Microsoft SQL và tôi không quen với cấu trúc chính xác của bảng, vì vậy một số SQL có thể là một chút ropey.

IF (SELECT COUNT(*) FROM beta WHERE name = 'John' > 0) 
    UPDATE alfa SET c1=(SELECT id FROM beta WHERE name = 'John') 
ELSE 
BEGIN 
    INSERT INTO beta (name) VALUES ('John') 
    INSERT INTO alfa (c1) VALUES (LAST_INSERT_ID()) 
END 

Hy vọng đây là một số trợ giúp.

+1

p.s. Nếu bạn quan tâm về số lượng truy vấn, tại sao không sử dụng một thủ tục được lưu trữ, theo cách đó bạn vẫn chỉ thực hiện một cuộc gọi đến máy chủ từ xa. – Bryan

+0

Cảm ơn, điều này có vẻ gần gũi. Nhưng cú pháp là NẾU .. ELSE .. END IF. Và có vẻ như câu lệnh IF chỉ có thể được sử dụng trong một quy trình nên tôi phải sử dụng nó trong mọi trường hợp. Vấn đề tương tự cũng được thảo luận ở đây: http://is.gd/8xupF – Zitrax

Các vấn đề liên quan