SQL 视图中的唯一列
Unique Columns in SQL Views
在我的数据库中,我有一个 table 包含完整的产品列表,另一个 table 在 x 轴上包含相同的产品列表,客户列表在y 轴,其中每个产品的值可以是 1 或 0,具体取决于该客户是否可以查看该产品。我的 SQL 看起来像这样:
SELECT products.product_code, products.product_type, products.product_category, products.product_title, products.product_description
FROM product_lists
INNER JOIN products
ON product_lists.product_code=products.product_code
WHERE product_lists.customer="1"
ORDER BY products.product_code
我的问题是我想为每个客户创建此结果的视图以用作该客户的产品 table,但是当我创建它时我收到消息 "This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available." 即使product_code 字段在产品 table 和 product_lists table.
中都设置为主键
如何创建一个 join/view,它使用 table(s) 中的主键?简而言之,我希望 product_code 字段成为我视图的主键。
谢谢!
我认为问题出在join
。您可以通过将条件移动到 where
子句来解决此问题。 MySQL 不允许在 from
中使用子查询,但在 where
中可以:
SELECT p.product_code, p.product_type, p.product_category, p.product_title, p.product_description
FROM products p
WHERE EXISTS (SELECT 1
FROM product_lists pl
WHERE pl.product_code = p.product_code AND
pl.customer = 1
)
ORDER BY p.product_code;
在我的数据库中,我有一个 table 包含完整的产品列表,另一个 table 在 x 轴上包含相同的产品列表,客户列表在y 轴,其中每个产品的值可以是 1 或 0,具体取决于该客户是否可以查看该产品。我的 SQL 看起来像这样:
SELECT products.product_code, products.product_type, products.product_category, products.product_title, products.product_description
FROM product_lists
INNER JOIN products
ON product_lists.product_code=products.product_code
WHERE product_lists.customer="1"
ORDER BY products.product_code
我的问题是我想为每个客户创建此结果的视图以用作该客户的产品 table,但是当我创建它时我收到消息 "This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available." 即使product_code 字段在产品 table 和 product_lists table.
中都设置为主键如何创建一个 join/view,它使用 table(s) 中的主键?简而言之,我希望 product_code 字段成为我视图的主键。
谢谢!
我认为问题出在join
。您可以通过将条件移动到 where
子句来解决此问题。 MySQL 不允许在 from
中使用子查询,但在 where
中可以:
SELECT p.product_code, p.product_type, p.product_category, p.product_title, p.product_description
FROM products p
WHERE EXISTS (SELECT 1
FROM product_lists pl
WHERE pl.product_code = p.product_code AND
pl.customer = 1
)
ORDER BY p.product_code;