我在一个表中有两列,比如列A和列B.我需要每次都使用列B的所有值搜索列A的每个值,如果在任何一个中找到列A值,则返回true列B的行。我怎么能得到这个?
我尝试使用以下命令:
select column _A, column_B,(if (column_A =column_B), True, False) as test from sample;
如果我使用上面的命令,它会单独检查该特定行。但是如果在列B的任何行中找到列A的值,我需要真值。 如何使用B列的所有值检查A列的一个值?
或者是否有可能迭代并比较两列之间的每个值?
答案 0 :(得分:1)
创建临时表t作为select,rand()作为id,column_A,column_B来自sample; - >参考1
从( - >参考3
中选择public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>{ ArrayList<Scoreboard_Item> arrayList = new ArrayList<>(); public RecyclerAdapter(ArrayList<Scoreboard_Item> arrayList){ this.arrayList = arrayList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent,false); MyViewHolder myViewHolder = new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.Username.setText(arrayList.get(position).getUsername()); holder.Team1.setText(arrayList.get(position).getTeam1()); holder.Team2.setText(arrayList.get(position).getTeam2()); holder.Sport.setText(arrayList.get(position).getSport()); holder.Status.setText(arrayList.get(position).getStatus()); } @Override public int getItemCount() { return arrayList.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder { TextView Username, Team1, Team2, Sport, Status; //ImageView imageView; public MyViewHolder(View itemView) { super(itemView); //imageView =(ImageView) itemView.findViewById(R.id.imageView); Username = (TextView)itemView.findViewById(R.id.Username); Team1 = (TextView)itemView.findViewById(R.id.Team1); Team2 = (TextView)itemView.findViewById(R.id.Team2); Sport = (TextView)itemView.findViewById(R.id.Sport); Status = (TextView)itemView.findViewById(R.id.Status); } }}
t3.id,t3.column_A,t3.column_B,t3.matchdistinct
)t3;
select t1.id as id, t1.column_A as column_A, t1.column_B as column_B,--> Refer 2
if(t2.column_B is null, False, True) as match from t t1 LEFT OUTER JOIN
t t2 ON t1.column_A = t2.column_B
。我们将利用此功能获取步骤3中的原始行。在此处创建临时表rand()
以简化后续步骤。使用自己的t
进行测试,要求所有行都匹配每列,并生成LEFT OUTER JOIN
列。请注意,这里可能会创建多个重复行而不是match
表,但我们已经掌握了重复项,因为它们的Sample
列将是相同的。
在此步骤中,我们应用id
来获取distinct
表中的原始行。然后,您可以放弃Sample
列。
id
也很昂贵。一种更高效的方法是使用Window函数,我们可以通过distinct
进行分区并选择窗口中的第一行。你可以探索一下。答案 1 :(得分:0)
您可以对自己执行左连接并检查列键是否为空。如果为null,则在另一个表中找不到该值。使用if或“case when”函数来检查它是否为空。
Select t1.column_A,
t1.column_B,
IF(t2.column_B is null, 'False', 'True') as test
from Sample t1
Left Join Sample t2
On t1.column_A = t2.column_B;