Tôi hy vọng đây không phải là lặp lại. Tôi đã kiểm tra các tìm kiếm và dường như tôi không thể tìm thấy câu trả lời rõ ràng cho điều này.Tham gia các bảng SQL Server trên một tuyên bố tương tự
Tôi có một bảng có khóa chính được đặt là UniqueIdentifier
. Tôi cũng có một bảng khác có một cột varchar
về cơ bản chứa một url với một chuỗi truy vấn có chứa các hướng dẫn từ bảng đầu tiên của tôi.
Vì vậy, 2 bàn của tôi cũng giống như:
StateTable
StateID StateName
EB06F84C-15B9-4397-98AD-4A63DA2A238E Active
URLTable
URL
page.aspx?id=EB06F84C-15B9-4397-98AD-4A63DA2A238E
Những gì tôi đang cố gắng làm là tham gia cùng nhau URLTable
và StateTable
ON giá trị của StateID
được chứa trong URL của bảng URL. Tôi đã không thực sự tìm ra sự tham gia. Tôi thậm chí đã thử chỉ chọn một bảng và cố gắng lọc theo các giá trị trong StateTable
. Tôi đã cố gắng làm một cái gì đó như thế này:
SELECT *
FROM URLTable
WHERE EXISTS
(SELECT *
FROM StateTable
WHERE URL LIKE '%' + StateID + '%')
Thậm chí điều đó không làm việc vì nó nói tôi so sánh uniqueidentifier
và varchar
.
Có cách nào để tham gia 2 bảng bằng lệnh giống như vậy và nơi lệnh tương tự không so sánh 2 biến không tương thích?
Cảm ơn bạn !!
CẬP NHẬT: Hãy để tôi thêm một số điều bổ sung mà tôi đã đề cập. Truy vấn này nhằm mục đích xây dựng các báo cáo phân tích. Các bảng là một phần của gói phân tích CMS ... do đó việc cập nhật hoặc thay đổi cấu trúc bảng không phải là một tùy chọn.
Thứ hai, các bảng này có lượng lưu lượng truy cập rất cao vì chúng đang thu thập phân tích trang web ... do đó hiệu suất là một vấn đề rất lớn. Điều thứ ba là trong ví dụ của tôi, tôi đã nói id = nhưng có thể có nhiều giá trị như id=guid&user=guid&date=date
.
CẬP NHẬT 2: Một điều nữa tôi nhận ra là kinh dị là đôi khi chuỗi truy vấn có dấu gạch ngang bị xóa khỏi GUID .. và đôi khi không .. vì vậy trừ khi tôi nhầm, tôi không thể truyền chuỗi con để Uniqueidentifier
. ai có thể xác nhận? phào nhẹ. tôi đã nhận được nó để làm việc bằng
REPLACE('-','',CONVERT(varchar(50), a.AutomationStateId))
nhưng bây giờ tôi rất nhiều lo lắng về vấn đề hiệu suất với điều này kể từ khi bảng của URL là rất lớn. Điều này có thể là bản chất của con thú, mặc dù, trừ khi có bất cứ điều gì tôi có thể làm.
+1 và tôi nghĩ bạn có thể sử dụng cú pháp đó trong một tham gia – Paparazzi
Cập nhật câu trả lời – Arion
Điều đó có hiệu quả không nếu tôi sử dụng Tôi đang tìm kiếm sẽ luôn luôn theo chuỗi "ID =" và nó sẽ luôn luôn là 36 ký tự sau đây? Có thể một cái gì đó như CAST (SUBSTRING (URL, CHARINDEX ('ID =', URL) +1,36) AS UNIQUEIDENTIFIER) = StateID và hiệu năng như thế nào? – divamatrix