Tôi có bảng được cập nhật bằng cách sử dụng các bản ghi của bảng khác và tôi đang thực hiện việc này để mang lại thông tin từ một hệ thống (cơ sở dữ liệu) sang hệ thống khác. Kịch bản là chút phức tạp, nhưng tôi rất cần giúp :-s
SQL INNER QUERY trả về nhiều giá trị trong truy vấn UPDATE
Có 3 bảng - component
, scan
và stage_link
phần
component_id stage_id
------------ --------
1 NULL
2 NULL
3 NULL
4 NULL
5 NULL
quét
scan_id component_id scanner_id date_scanned
------- ------------ ---------- -----------------------
1 1 scanner_a 2012-01-01 07:25:15.125
2 1 scanner_b 2012-01-02 08:14:05.456
3 2 scanner_a 2012-01-01 12:05:45.465
4 3 scanner_a 2012-01-01 19:45:12.536
5 1 scanner_c 2012-01-03 23:33:54.243
6 2 scanner_b 2012-01-02 11:59:12.545
stage_link
stage_link_id scanner_id stage_id
------- ---------- ----------
1 scanner_a 1
2 scanner_b 1
3 scanner_c 2
4 scanner_d 2
5 scanner_e 2
6 scanner_f 3
tôi cần phải update
bàn component
và set
lĩnh vực này stage_id
theo quá trình quét mới nhất. Mỗi lần quét sẽ đưa thành phần vào một giai đoạn theo máy quét liên quan. Tôi đã viết truy vấn sau đây để update
bảng component
, nhưng nó ném một lỗi nói;
Subquery returned more than 1 value. This is not permitted when the subquery follows '='
Truy vấn là;
UPDATE component
SET stage_id = (select stage_id
from(
select scn.scanner_id, sl.stage_id
from scan scn
INNER JOIN stage_link sl ON scn.scanner_id = sl.scanner_id
where scn.date_scanned = ( select temp_a.max_date
from ( SELECT x.component_id, MAX(x.date_scanned) as max_date
FROM scan x
where component_id = x.component_id
GROUP BY x.component_id
) as temp_a
where component_id = temp_a.component_id)
) as temp_b
)
Tôi đang làm việc theo số MS SQL Server
và muốn sắp xếp điều này bằng cách sử dụng số PHP
hoặc bất kỳ ngôn ngữ nào khác.
Tôi đã thử một ngày để thực hiện công việc này nhưng vẫn không có cách nào để thực hiện công việc này. Bất cứ sự giúp đỡ nào cũng được đánh giá cao!
Cảm ơn bạn rất nhiều trước :-)
Cảm ơn bạn rất nhiều vì gợi ý này !! nó đến giúp đỡ rất nhiều !! Đây chính là điều tôi muốn !!! :-) cảm ơn bạn rất nhiều một lần nữa!!!!! – mithilatw
@mithilatw: Bạn được chào đón. Xin lưu ý rằng có thể có 2 vấn đề với truy vấn này (để tham khảo trong tương lai): (1) Điều này giả định rằng date_scanned luôn là duy nhất. Nếu 2 máy quét quét cùng một lúc (tối đa phần nano giây), thì 'SELECT component_id, scanner_id' sẽ trả về 2 giá trị. (2) Các trường trong tham gia 'Temp2.scanner_id = SL.scanner_id' là các cột dựa trên char, do đó nếu bạn có nhiều scanner_ids, thì truy vấn này có thể bắt đầu chậm lại. – Kash