我有三个表(A,B,C),A有一个与B共享的密钥,B有一个与C共享的密钥。我必须将这三个表组合起来从A获取与列相关的信息在C.我的代码是:
SELECT
a.x_code, a.item_id, c.action_type, c.item_name
FROM
A a
RIGHT OUTER JOIN
B b ON b.item_id = a.item_id
LEFT OUTER JOIN
C c ON c.item_name = b.item_name
我在MySQL上运行它并且查询没有生成任何结果并且超时。
非常感谢任何帮助。
由于
答案 0 :(得分:1)
不确定为什么需要外连接。试试这个。
SELECT
a.x_code, b.item_id, c.action_type, b.item_name
FROM
B b
JOIN
A a ON b.item_id = a.item_id
JOIN
C c ON c.item_name = b.item_name
注意我更改了表顺序并将连接表放在第一位。
如果你坚持使用外连接,请将连接更改为LEFT OUTER JOIN - 两者都是,并在查询结尾添加一个WHERE a.x_code IS NOT NULL和c.action_type IS NOT NULL。
答案 1 :(得分:0)
尝试此示例查询。
示例:强>
3个表格(产品,类别,子类别)
产品:product_id,product_name,cat_id
类别: cat_id,cat_name
子类别: subcat_id,subcat_name,cat_id
SELECT product.product_name, category.cat_name, subcategory.subcat_name
FROM product
INNER JOIN category ON product.cat_id = category.cat_id
INNER JOIN subcategory ON category.cat_id=subcategory.cat_id;
答案 2 :(得分:0)
尝试在join子句
中使用的列上设置非聚集索引在这种情况下,列应为
这会强制查询优化器使用索引查找来避免全表扫描。
将select子句中使用的列包含在索引中将保存许多不必要的页面(内存)访问,因为查询所需的数据可以在索引本身中找到。
在许多情况下,外连接不使用索引,尝试使用索引提示强制它使用索引。
注意:建议避免在列上设置索引,其中包含非常少的不同值或其中包含大量字符。