Tôi đang cố gắng sử dụng một cột có danh sách các giá trị được phân tách bằng dấu phẩy trong mệnh đề in. Tôi đã nghĩ đến việc thực hiện chứa nhưng sẽ không chính xác khi tìm kiếm các giá trị một chữ số
Ví dụ. 1,5,12,14,16,15,18,19,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,40,41,
Đây là lỗi mà tôi đang nhận được
[MySql.Data] ErrorCode: -2147467259, Number: 1064 ErrorMessage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'cpei5.value' at line 12
Đây là truy vấn của tôi
SELECT soi.*
FROM sales_order_item soi
INNER JOIN sales_order so
ON so.entity_id = soi.order_id
INNER JOIN sales_order_address soa
ON soa.parent_id = so.entity_id
INNER JOIN catalog_product_entity cpe
ON cpe.sku = soi.sku
INNER JOIN catalog_product_entity_text cpei5
ON cpei5.row_id = cpe.entity_id
INNER JOIN eav_attribute ea5
ON ea5.attribute_code LIKE 'state_not_allowed'
AND ea5.attribute_id = cpei5.attribute_id
WHERE soa.address_type = 'shipping'
AND date_add[so.created_at, interval 365 DAY] >= CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] create table CommaSeperateDemo
- > [
- > Id int,
- > FirstName varchar[100],
- > LastName varchar[100]
- > ];
Query OK, 0 rows affected [0.93 sec]
Chèn bản ghi
mysql> insert into CommaSeperateDemo values[1,'John','Taylor']; Query OK, 1 row affected [0.17 sec] mysql> insert into CommaSeperateDemo values[2,'Carol','Taylor']; Query OK, 1 row affected [0.12 sec] mysql> insert into CommaSeperateDemo values[3,'Johnson','T.']; Query OK, 1 row affected [0.16 sec]
Bây giờ chúng ta hãy hiển thị tất cả các bản ghi
mysql> select *from CommaSeperateDemo;
Sau đây là đầu ra
+------+-----------+----------+ | Id | FirstName | LastName | +------+-----------+----------+ | 1 | John | Taylor | | 2 | Carol | Taylor | | 3 | Johnson | T. | +------+-----------+----------+ 3 rows in set [0.00 sec]
Đây là cú pháp để lấy kết quả dưới dạng danh sách được phân tách bằng dấu phẩy với sự trợ giúp của concat[]
Select concat[ColumnName1, ',', ColumnName2, ',', ColumnName3,.............] as AliasName from yourTableName;
Bây giờ chúng ta hãy thực hiện cú pháp trên trong truy vấn sau
mysql> SELECT concat[Id, ',', FirstName,',', LastName] as CONCATEIDFIRSTANDLASTNAME from CommaSeperateDemo;
Sau đây là cú pháp
________số 8Sử dụng FIND_IN_SET[] thay vì MySQL IN[]. Trước tiên chúng ta hãy tạo một -
mysql> create table DemoTable1423 -> [ -> CountryName varchar[100] -> ]; Query OK, 0 rows affected [0.51 sec]
Chèn một số bản ghi vào bảng bằng cách sử dụng chèn -
SELECT soi.*
FROM sales_order_item soi
INNER JOIN sales_order so
ON so.entity_id = soi.order_id
INNER JOIN sales_order_address soa
ON soa.parent_id = so.entity_id
INNER JOIN catalog_product_entity cpe
ON cpe.sku = soi.sku
INNER JOIN catalog_product_entity_text cpei5
ON cpei5.row_id = cpe.entity_id
INNER JOIN eav_attribute ea5
ON ea5.attribute_code LIKE 'state_not_allowed'
AND ea5.attribute_id = cpei5.attribute_id
WHERE soa.address_type = 'shipping'
AND date_add[so.created_at, interval 365 DAY] >= CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] create table CommaSeperateDemo
- > [
- > Id int,
- > FirstName varchar[100],
- > LastName varchar[100]
- > ];
Query OK, 0 rows affected [0.93 sec]
1Bây giờ chúng ta biết rằng trạng thái sẽ luôn là trường cuối cùng trong giá trị kết quả. Vì hàm
SELECT soi.*
FROM sales_order_item soi
INNER JOIN sales_order so
ON so.entity_id = soi.order_id
INNER JOIN sales_order_address soa
ON soa.parent_id = so.entity_id
INNER JOIN catalog_product_entity cpe
ON cpe.sku = soi.sku
INNER JOIN catalog_product_entity_text cpei5
ON cpei5.row_id = cpe.entity_id
INNER JOIN eav_attribute ea5
ON ea5.attribute_code LIKE 'state_not_allowed'
AND ea5.attribute_id = cpei5.attribute_id
WHERE soa.address_type = 'shipping'
AND date_add[so.created_at, interval 365 DAY] >= CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] create table CommaSeperateDemo
- > [
- > Id int,
- > FirstName varchar[100],
- > LastName varchar[100]
- > ];
Query OK, 0 rows affected [0.93 sec]
3Giải pháp cuối cùng để tất cả nhân viên làm việc ở một trạng thái nhất định được hiển thị bên dưới
mysql> create table CommaSeperateDemo - > [ - > Id int, - > FirstName varchar[100], - > LastName varchar[100] - > ]; Query OK, 0 rows affected [0.93 sec]4
Hãy cẩn thận
Một điều cần lưu ý về
SELECT soi.*
FROM sales_order_item soi
INNER JOIN sales_order so
ON so.entity_id = soi.order_id
INNER JOIN sales_order_address soa
ON soa.parent_id = so.entity_id
INNER JOIN catalog_product_entity cpe
ON cpe.sku = soi.sku
INNER JOIN catalog_product_entity_text cpei5
ON cpei5.row_id = cpe.entity_id
INNER JOIN eav_attribute ea5
ON ea5.attribute_code LIKE 'state_not_allowed'
AND ea5.attribute_id = cpei5.attribute_id
WHERE soa.address_type = 'shipping'
AND date_add[so.created_at, interval 365 DAY] >= CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] create table CommaSeperateDemo
- > [
- > Id int,
- > FirstName varchar[100],
- > LastName varchar[100]
- > ];
Query OK, 0 rows affected [0.93 sec]
7Sau đó, cố gắng trích xuất trường thứ sáu bằng
SELECT soi.*
FROM sales_order_item soi
INNER JOIN sales_order so
ON so.entity_id = soi.order_id
INNER JOIN sales_order_address soa
ON soa.parent_id = so.entity_id
INNER JOIN catalog_product_entity cpe
ON cpe.sku = soi.sku
INNER JOIN catalog_product_entity_text cpei5
ON cpei5.row_id = cpe.entity_id
INNER JOIN eav_attribute ea5
ON ea5.attribute_code LIKE 'state_not_allowed'
AND ea5.attribute_id = cpei5.attribute_id
WHERE soa.address_type = 'shipping'
AND date_add[so.created_at, interval 365 DAY] >= CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] create table CommaSeperateDemo
- > [
- > Id int,
- > FirstName varchar[100],
- > LastName varchar[100]
- > ];
Query OK, 0 rows affected [0.93 sec]
9Một cách giải quyết khả thi cho vấn đề này là kiểm tra xem số lượng trường có lớn hơn hoặc bằng chỉ mục được yêu cầu hay không và sau đó nhập mã ở trên hoặc trả về chuỗi trống nếu chỉ mục trường không hợp lệ
mysql> insert into CommaSeperateDemo values[1,'John','Taylor']; Query OK, 1 row affected [0.17 sec] mysql> insert into CommaSeperateDemo values[2,'Carol','Taylor']; Query OK, 1 row affected [0.12 sec] mysql> insert into CommaSeperateDemo values[3,'Johnson','T.']; Query OK, 1 row affected [0.16 sec]0
sử dụng có thể
Trong hầu hết các trường hợp, tốt hơn là sử dụng một bảng tra cứu riêng biệt hoặc một cột cho từng trường thay vì lưu trữ dữ liệu dưới dạng các giá trị được phân tách bằng dấu phẩy để tra cứu sau này
Tuy nhiên, có thể có những trường hợp hiếm hoi mà thủ thuật trên có thể hữu ích. Ví dụ: gần đây tôi cần trả về một danh sách các giá trị từ hàm do người dùng xác định và cách duy nhất để làm điều đó là trả về một chuỗi chứa các giá trị được phân tách bằng dấu phẩy. Cuối cùng tôi đã sử dụng
SELECT soi.*
FROM sales_order_item soi
INNER JOIN sales_order so
ON so.entity_id = soi.order_id
INNER JOIN sales_order_address soa
ON soa.parent_id = so.entity_id
INNER JOIN catalog_product_entity cpe
ON cpe.sku = soi.sku
INNER JOIN catalog_product_entity_text cpei5
ON cpei5.row_id = cpe.entity_id
INNER JOIN eav_attribute ea5
ON ea5.attribute_code LIKE 'state_not_allowed'
AND ea5.attribute_id = cpei5.attribute_id
WHERE soa.address_type = 'shipping'
AND date_add[so.created_at, interval 365 DAY] >= CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] = CURRENT_DATE[]
AND date_add[so.created_at, interval 365 DAY] create table CommaSeperateDemo
- > [
- > Id int,
- > FirstName varchar[100],
- > LastName varchar[100]
- > ];
Query OK, 0 rows affected [0.93 sec]
10