我有一个应该首先执行的以下简化子查询:
(SELECT app.recordId, left(userid,1) userid, count(*)FROM
app group by userid,recordId) y
根据此子查询的结果,如果userid='A'
我希望INNER加入tableA
,If userid='B'
,我想与tableB
进行INNER JOIN。
我还希望显示两个内部联接的结果。有没有办法让我可以在不重新执行子查询的情况下执行此操作以最小化执行时间?
答案 0 :(得分:1)
一种方法是使用left join
两次,可能使用coalesce()
:
SELECT y.*, COALESCE(a.col1, b.col1) as col1
FROM (SELECT app.recordId, left(userid, 1) as userid, count(*) as cnt
FROM app
GROUP BY recordId, left(userid, 1)
) y LEFT JOIN
tableA a
ON y.userId = 'A' and . . . LEFT JOIN
tableB b
ON y.userId = 'B' and . . .
WHERE y.userId IN ('A', 'B');
. . .
是其他连接条件的空间,问题未指定。
编辑:
如果要过滤掉没有匹配的行(ala是“内连接”方法):
WHERE y.userId IN ('A', 'B') and not (a.col is null and b.col is null)
其中a.col
和b.col
是用于join
条件的两列。
答案 1 :(得分:0)
您没有说明如何处理表A和B中的列。我们也不知道表格是如何相关的。所以我能给你的只是一个例子。
假设你想要一个来自表A或B的描述:
statusMsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Intent intent = new Intent(view.getContext(), MainActivity.class);
// THIS IS WHAT I DID, GET CONTEXT FROM VIEW
context = view.getContext();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
final android.content.ClipboardManager clipboardManager = (android.content.ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
final android.content.ClipData clipData = android.content.ClipData
.newPlainText("Copy", statusMsg.getText());
clipboardManager.setPrimaryClip(clipData);
Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
} else {
final android.text.ClipboardManager clipboardManager = (android.text.ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText(statusMsg.getText());
Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
}
//ClipboardManager cm = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
//cm.setText(item.getStatus());
//Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
}
});