Truy vấn sau đây dường như chỉ hoạt động khi có một mục nhập duy nhất với
SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
2 được đặt thành SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
3.Nó thất bại khi có nhiều hồ sơ phù hợp với điều kiện này.
Có thể xóa tất cả các địa chỉ của người dùng có thuộc tính
SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
2 được đặt thành SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
3 mà không cần sử dụng SB.SELECT @id:=[SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'];
DELETE FROM Address
WHERE user_id=@id;
Lỗi chính xác mà tôi nhận được là:
SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
6.
Tonio
4044 Huy hiệu bạc17 Huy hiệu đồng4 silver badges17 bronze badges
Đã hỏi ngày 2 tháng 7 năm 2014 lúc 13:58Jul 2, 2014 at 13:58
2
Lỗi có nghĩa là truy vấn bên trong của bạn không trả lại một hàng khi bạn cố gắng gán ID cho một biến.
SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
Gán các giá trị cho các truy vấn thông qua biến phải luôn luôn là kết quả đơn hàng. Nếu bạn muốn lưu trữ kết quả đa cột, bạn có thể làm như sau:
SELECT field_1, field_2, field_3 INTO @var_a, @var_b, @var_c FROM any_table
Nhưng vì bạn đã hỏi điều này:
Có thể xóa tất cả các địa chỉ của người dùng có thuộc tính
2 được đặt thànhSELECT id FROM USER WHERE dateOfBirth='1975-02-28'
3 mà không cần sử dụng SB.SELECT id FROM USER WHERE dateOfBirth='1975-02-28'
Lỗi chính xác mà tôi nhận được là:
SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
6.Tonio
4044 Huy hiệu bạc17 Huy hiệu đồngSep 1, 2015 at 13:53
Đã hỏi ngày 2 tháng 7 năm 2014 lúc 13:58
Lỗi có nghĩa là truy vấn bên trong của bạn không trả lại một hàng khi bạn cố gắng gán ID cho một biến.
DELETE FROM Address
WHERE user_id IN [SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'];
EDIT:
Gán các giá trị cho các truy vấn thông qua biến phải luôn luôn là kết quả đơn hàng. Nếu bạn muốn lưu trữ kết quả đa cột, bạn có thể làm như sau:
SELECT @ids:=[SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'];
Nhưng vì bạn đã hỏi điều này:
Như Tonio đã nói, hãy thay đổi truy vấn xóa của bạn theo đề xuất của anh ấy và nó sẽ hoạt động.
Xóa khỏi địa chỉ WHERE user_id in [chọn ID từ người dùng nơi DateOfBirth = '1975-02-28'];
Đã trả lời ngày 1 tháng 9 năm 2015 lúc 13:53Jul 3, 2014 at 11:43
Nếu có nhiều hơn một mục nhập như vậy, con
SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
9 sẽ trả về một bảng ID.Tonio4044 Huy hiệu bạc17 Huy hiệu đồng4 silver badges17 bronze badges
4
Đã hỏi ngày 2 tháng 7 năm 2014 lúc 13:58
Lỗi có nghĩa là truy vấn bên trong của bạn không trả lại một hàng khi bạn cố gắng gán ID cho một biến.
delete a from address a join user u on [a.user_id=u.id]
where u.dateOfBirth='1975-02-28';
Gán các giá trị cho các truy vấn thông qua biến phải luôn luôn là kết quả đơn hàng. Nếu bạn muốn lưu trữ kết quả đa cột, bạn có thể làm như sau:
Nhưng vì bạn đã hỏi điều này:1 gold badge11 silver badges23 bronze badges
Như Tonio đã nói, hãy thay đổi truy vấn xóa của bạn theo đề xuất của anh ấy và nó sẽ hoạt động.Oct 29, 2018 at 17:43
Khi bạn cần lấy một hàng từ bảng hoặc truy vấn, bạn có thể sử dụng cú pháp sau trong SQL Server:
DECLARE @name VARCHAR[30]; SELECT @name = city FROM cities;
Nhưng điều gì xảy ra nếu chọn trả về nhiều hàng?
Giả sử chúng tôi có định nghĩa bảng và dữ liệu sau:
CREATE TABLE cities [city VARCHAR[30]]; INSERT INTO cities VALUES ['St. Louis']; INSERT INTO cities VALUES ['San Diego']; INSERT INTO cities VALUES ['Seattle'];
Hãy chạy dữ liệu chọn và đầu ra:
DECLARE @name VARCHAR[30]; SELECT @name = city FROM cities; PRINT @name; -- Prints Seattle
SQL Server không gây ra lỗi và trả về giá trị cuối cùng. Nó xác định số lượng hàng đáp ứng tiêu chí tìm kiếm và bạn có thể có được số này bằng cách sử dụng @@ Rowcount:
DECLARE @name VARCHAR[30]; SELECT @name = city FROM cities; PRINT @@ROWCOUNT; -- Prints 3
Lưu ý rằng khi bạn muốn truy xuất một hàng, nhưng nhiều hàng có thể đáp ứng điều kiện tìm kiếm, bạn phải kiểm tra @@ ROWCOUNT> 0, không phải @@ RowCount = 1 để xác định nếu một hàng tồn tại:
SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
0Vì SQL Server cố gắng tìm tất cả các hàng [để tính toán @@ rowcount] trong khi bạn chỉ muốn tìm hàng đầu tiên, hãy xem xét sử dụng Top 1 trong truy vấn:
SELECT id
FROM USER
WHERE dateOfBirth='1975-02-28'
1Khi bạn sử dụng Top 1, bạn có thể kiểm tra một cách an toàn @@ Rowount = 1 để xác định nếu một hàng được tìm thấy.